Flask + Flask-RESTful を使って、Pythonで REST APIを作ってみます。
前回 作成したREST APIを、Flask-RESTfulを使って書き直していきます。
スポンサーリンク
インストール
Flaskと、Flask-RESTfulをインストールします。
$ pip install flask flask_restful
Anaconda環境の場合は次のコマンド
$ conda install flask
$ conda install -c conda-forge flask-restful
サンプルード
ユーザを、取得/登録/更新/削除する、REST APIのサンプルです。
HTTPメソッドによって、処理モードを振り分けています。
HTTP メソッド | URL | ペイロード | 処理内容 |
---|---|---|---|
GET | /user?id=<USERID> | なし | ユーザを1件取得 |
POST | /user/ | ユーザ情報(JSON) | ユーザの登録 |
PUT | /user/ | ユーザ情報(JSON) | ユーザの更新 |
DELETE | /user?id=<USERID> | なし | ユーザの削除 |
# coding: utf-8
from flask import Flask, abort, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
# テストデータ
users = [
{ "id": "U001", "name": "ユーザ太郎", "age": 27 },
{ "id": "U002", "name": "ユーザ二郎", "age": 20 },
{ "id": "U003", "name": "ユーザ三郎", "age": 10 }
]
class User(Resource):
def get(self):
"""
ユーザを1件取得する
"""
id = request.args.get('id')
result = [n for n in users if n["id"] == id]
if len(result) >= 1:
# ユーザ情報を返却
return result[0]
else:
# 存在しないユーザIDが指定された
abort(404)
def post(self):
"""
ユーザを登録する
"""
#ユーザを追加
users.append(request.json)
#正常に登録できたので、HTTP status=204(NO CONTENT)を返す
return '', 204
def put(self):
"""
ユーザを更新する
"""
user = request.json
lst = [val for val in users if val["id"] == user["id"]]
if len(lst) >= 1:
lst[0]["name"] = user["name"]
lst[0]["age"] = user["age"]
else:
#存在しないユーザIDが指定された場合
abort(404)
#正常に更新できたので、HTTP status=204(NO CONTENT)を返す
return '', 204
def delete(self):
"""
ユーザを削除する
"""
id = request.args.get('id')
lst = [i for i, val in enumerate(users) if val["id"] == id]
for index in lst:
del users[index]
if len(lst) >= 1:
#ユーザの削除を行った場合、HTTP status=204(NO CONTENT)を返す
return '', 204
else:
#存在しないユーザIDが指定された場合
abort(404)
api.add_resource(User, '/user')
if __name__ == "__main__":
app.run(debug=True)
上のサンプルのように、Flask-RESTfulでは、ユーザ情報・顧客情報などのリソース単位で Pythonのクラスを作成します。
クラスの中には、HTTP メソッドに対応する関数(get/post/put/delete)を定義して、必要な処理を実装します。
スポンサーリンク
おわりに
Flask-RESTfulを使えば、クラスとリソースの関係が、1:1になるので、APIの数が増えていっても分かりやすい構造となり、メンテナンス性が向上すると思います。
さらに、HTTPのGETであれば get()関数を作るなど、メソッド名がフレームワーク側でルール決めされている為、人によって関数名がバラバラになる心配もなく、コードが標準化される所もいいですね。
関連記事
■ MacにPython3をインストールする! (サクッとインストールしたい人向け)
Mac環境に、Python3を簡単にインストールする方法を紹介しています。
■ Python3入門! 基礎をおさらい (変数/演算子/条件分岐/繰り返し)
1つの記事に、基本文法をまとめて書いているので、時間が空いて忘れてしまった場合でも、一気に復習出来るようになっています。よければ見てください。
■ Flaskでソースの変更を検知して、Webアプリを自動リロードする[Python Tips]
Flaskの開発で、ソースを更新したら、自動的にWebアプリをリロードする方法です。
■ Flaskで REST API開発する! 直ぐに実行できるサンプルコードで解説 【Python Tips】
Pythonの軽量Webフレームワークである、FlaskでREST APIを作るまでの流れを、紹介します。
■ Pythonで小数点の四捨五入/切り捨て/切り上げを行う
Pythonのdecimalモジュール
を使って、小数点の丸めを行う方法です。
■ Pythonで正規表現を使って数値/英字チェックを実装する (コピペ用)
数値/半角英字などのチェック処理を、Pythonの正規表現を使って実装します。
コピペで簡単に使えるようになっています。
0 件のコメント:
コメントを投稿