FalconでWeb API開発

Posted by 技術ブログ by Strawhat.net on Tuesday, November 15, 2016

先日に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やファイルなどのデータの処理はまた別途まとめます。