LoginSignup
188
177

More than 5 years have passed since last update.

Falconで光速のWeb APIサーバーを構築する

Posted at

Falconは、Web APIサーバーの構築に特化したWebアプリケーションフレームワークです。
他のフレームワークがテンプレートエンジンやO/Rマッパなどのリッチな機能を詰め込んだ大衆車だとすれば、FalconはWeb APIサーバーに必要な機能だけにフォーカスし研ぎ澄まされた、F1マシンのようなフレームワークになっています。

Falcon Official Page

特筆すべきは、そのシンプルな設計と圧倒的な速度です。
以下は公式ページに掲載のベンチマークです(2015/11/26時点、PyPy2.5.1での比較結果)。

benchmark.PNG

シンプルなフレームワークと言われるFlaskの27倍、Bottleの1.5~2倍の速度で動作します。

実装も非常に簡単です。以下は、シンプルなJSONレスポンスを返すサーバーの実装例です。
pythonで実行すると8000番ポートでサーバーが立ち上がり、アクセスするとJSONレスポンスが返ってきます。

example.py
import json
import falcon


class HelloResource(object):

    def on_get(self, req, resp):
        msg = {
            "message": "Welcome to the Falcon"
        }
        resp.body = json.dumps(msg)

app = falcon.API()
app.add_route("/", HelloResource())


if __name__ == "__main__":
    from wsgiref import simple_server
    httpd = simple_server.make_server("127.0.0.1", 8000, app)
    httpd.serve_forever()

  • リクエストに対しては、Resourceで処理を行う。Resourceは単なるPythonクラスで、継承などの必要はなし
  • Resourceクラスでは、on_geton_postなど、HTTP METHODに対応したメソッドで処理を行う
  • add_routeで、どのURLパスをどのResourceクラスが担当するか設定

他にHookといういわゆるFilterを実装できる機能がありますが、基本はこれだけです。
FalconアプリケーションはWSGIアプリケーションなので、WSGIサーバーで動かすことができます。上記ではPython組み込みのsimple_serverを使っていますが、gunicornやwaitressでも動かすことができます(公式はgunicornを推奨していますが、Windowsの人は動かせないと思うので、waitress等を使うとよいと思います)。

  • gunicorn ※Windows対応のIssueは上がっているが、2015/11/26現在ではまだ
  • waitress pure-PythonのWSGIサーバー。速い。

用途としては、以下のようなシチュエーションに向いていると思います。

  • クライアント側はJSフレームワークで構築するからテンプレートエンジンはいらない。JSONデータのやり取りをとにかく早くしたい。
  • メールやセンサーデータなど、トラフィックの多いデータを高速にさばきたい(画面はそもそもない)
  • シンプルなAPIサーバーを作りたいので、学習コストが高いフレームワークは勘弁

ぜひ、使ってみてその速度と手軽さを体感してもらえればと思います。

188
177
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
188
177