先日にWeb APIを実装したとき、FalconというPython向けのWebフレームワークを使ったのでメモ。
Flanconを使った感想は、Web APIの処理の実装に集中できる、でしょうか。 PythonでWebアプリを実装するとき、Flask、BottleなどのWebフレームワークを使うのですが、これらのWebフレームワークはWeb APIには不要な画面表示のテンプレートを扱う機能が含まれています。
FlanconはWeb APIに特化していて、処理の実装に集中できるのが特徴です。
Flanconでの実装例
FalconはHTTP verbに応じたメソッド(on_get, on_post, …)を定義して、 引数のHTTP requestを処理して引数のHTTP responseに結果を返す処理を記述します。
例えば、JSONデータを返すGETメソッドを定義した例が以下になります。 GETメソッドの記述だけを考えればいいので、見通しがよく、書きやすいです。
# -*- coding: utf-8 -*-
import falcon
import json
class HelloAPI:
def on_get(self, req, resp):
resp.status = falcon.HTTP_200
result = { 'message':'hello world', 'lang':'en' }
resp.body = json.dumps(result)
api = falcon.API()
api.add_route('/hello', HelloAPI())
FalconのAPIはWSGIサーバで実行できるので、実行するときはgunicornなどを使って
$ pip install falcon
$ pip install gunicorn
$ gunicon hello:api
とすれば動きます。 Windowsではgunicornがfcntlモジュールの問題で動作しないため、waitressを使う方法があります。
> pip install waitress
> waitress-serve hello:api
Serving on http://DESKTOP-A9B9C9D:8080
curlコマンドなどでGETアクセスしてみると、実装した通りJSONデータが帰ってくるのが分かります。
$ curl -XGET http://localhost:8080/hello
{"message": "hello world", "lang": "en"}
POST/PUT/DELETEやファイルなどのデータの処理はまた別途まとめます。