Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
180
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@icoxfog417

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

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サーバーを作りたいので、学習コストが高いフレームワークは勘弁

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
180
Help us understand the problem. What are the problem?