Falconとは?
Falconは、Pythonの軽量フレームワークの一種で、WSGIアプリケーションでもあります。
シンプルな設計と圧倒的な速度が特徴です。
Pythonフレームワークと言えば、主にDjango,Flask,Bottleなどが有名ですが、Falconは他のフレームワークのようにO/Rマッパなどのフレームワーク一つあればWEBアプリケーションが作成できるような機能は備えていません。
シンプルにリクエストが来たらjsonなどのレスポンスを返すだけのフレームワークですが、その分他のフレームワークよりはパフォーマンスは最速です。
主な用途としては、WEB APIを構築するためのWSGIアプリケーションとして適しています。
チュートリアル
実際にチュートリアルとして、FalconでWebAPIを作成してみましょう。今回はリクエストが飛んだ場合に、jsonを返すシンプルなWebAPIを作成します。
Pythonのバージョンとしては自分はPython 3.4を使用していますが、Python 3.0系であれば、特に問題はないと思います。
以下が続きの内容となっています。
Python軽量フレームワークFalconでAPI開発 入門(その2)
Python軽量フレームワークFalconでAPI開発 入門(その3)
インストール
まずはpipを使って、falconを導入しましょう。非常に簡単です。
$ pip install falcon
実装
実際にコーディングしていきましょう。以下は127.0.0.1
の8000
番ポートに向かってGETリクエストを飛ばすと、メッセージ付きのjsonが返ってくるというものです。非常に簡単に実装できます。
import json
import falcon
class AppResource(object):
def on_get(self, req, resp):
msg = {
"message": "Welcome to the Falcon"
}
resp.body = json.dumps(msg)
app = falcon.API()
app.add_route("/", AppResource())
if __name__ == "__main__":
from wsgiref import simple_server
httpd = simple_server.make_server("127.0.0.1", 8000, app)
httpd.serve_forever()
上記のコードを少し詳しく見ていきます。
app = falcon.API()
app.add_route("/", AppResource())
ここの処理でAPIを定義しています。add_route
メソッドでURLパスを指定し、そのURLパスのリクエストに対して、どのResourceクラスが担当するかを指定しています。
Resourceクラス自体は継承もしていないただのPythonのクラスです。
上記では、ルートパスに対してリクエスト(つまりhttp://127.0.0.1:8000
)が飛んで来た場合に、その処理をAppResource()
というクラスに任せています。
class AppResource(object):
def on_get(self, req, resp):
msg = {
"message": "Welcome to the Falcon"
}
resp.body = json.dumps(msg)
on_get
というメソッドで、GETリクエストを処理しています。
同じURLパスに対して、POSTリクエストをした場合は、on_post
というメソッドを定義することで、POSTリクエストに対する処理も行えます。
上記はGETリクエストが飛んで来た場合に、msgというディクショナリ(辞書)型を定義し、json型に変換してresp
(レスポンス)のボディ部に格納して、レスポンスを返しているというものです。
if __name__ == "__main__":
from wsgiref import simple_server
httpd = simple_server.make_server("127.0.0.1", 8000, app)
httpd.serve_forever()
WSGIサーバーを起動するための処理です。
WSGIServer
クラスは WSGI サーバのリファレンス実装です。WSGIアプリケーションであるFalconのappをsimple_server.make_server
の引数として与えて実行しています。
動作
実際にFalconのアプリケーションを動かしてみましょう。
$ python app.py
以下を実行してGETリクエストを投げて見ましょう。
$ curl -v 127.0.0.1:8000
まとめ
これで実際にシンプルなWebAPIが完成します。
Falconは他にもHookとMiddlewareという機能がありますが、次回にご紹介します。