最近Flaskの勉強をしていたので、今後スマホアプリと連携したアプリケーションを作るときのためにAPIの設計についても勉強してみました.
REST
APIの仕様を決める上で、RESTやSOAPといった考え方があるらしい. 特にRESTという考え方は結構重要らしいという話を聞いたので、勉強した内容を自分なりにまとめてみる.(はっきり理解しているわけではないので間違いがあるかもです)
RESTは「リソース(ブログの記事や画像など)」を扱うための考え方のようです. リソースはそれぞれ固有のURIを持っており、リソースに対するCRUD(Create,Read,Update,Delete)操作を、HTTPの4つのメソッド(GET,POST,PUT,DELETE)で指定するそうです.
CRUD操作 | 対応するHTTPメソッド | 役割 | 例)ブログ記事 |
---|---|---|---|
Create(生成) | POST | リソースの新規作成 | 記事の作成 |
Read(読み取り) | GET | リソースの取得 | 記事の表示 |
Update(更新) | PUT | 既存のリソースのアップデート | 記事の更新 |
Delete(削除) | DELETE | リソースの削除 | 記事の削除 |
Flaskで表現すると↓のようなイメージになると思います.
@app.route("/article/<int:num>/", methods=['GET', 'POST', 'PUT', 'DELETE']) def article_crud(num): """ブログ記事のCRUD操作 """ if request.method == 'POST': # 記事の作成 elif request.method == 'PUT': # 記事の更新 elif request.method == 'DELETE': # 記事の削除 else: # request.method == 'GET' # 記事の取得
cURLとjq
apiを設計したら、その動作確認としてcURLやjqを使うと便利そうです。どちらもHomeBrewでインストールできます.curlは↓のように各種のリクエストを送信できます.
# GET $ curl http://localhost:5000/article/1.html # POST $ curl http://localhost:5000/article/1 -X POST -d "article[title]=送信データ" # PUT $ curl http://localhost:5000/article/1 -X PUT -d "article[title]=送信データ" # DELETE $ curl http://localhost:5000/article/1 -X DELETE
レスポンスがjson形式なら、jqを使って見やすく表示できます.
$ curl http://localhost:5000/article/1 -X DELETE | jq .
参考
RESTfulAPIについては
http://www.slideshare.net/takuyaueda967/angular-jsbootstrapwebhtml5-2
を読んで勉強しました。
FlaskでRESTfulAPIをかくなら
- https://github.com/miguelgrinberg/REST-tutorial
- http://blog.miguelgrinberg.com/post/designing-a-restful-api-with-python-and-flask
- http://blog.miguelgrinberg.com/post/writing-a-javascript-rest-client
- http://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful
- http://blog.miguelgrinberg.com/post/restful-authentication-with-flask
を参考にするといいかも。
その他
- 作者: Leonard Richardson,Mike Amundsen,Sam Ruby
- 出版社/メーカー: O'Reilly Media
- 発売日: 2013/09/12
- メディア: Kindle版
- この商品を含むブログ (1件) を見る