Edited at

Python軽量フレームワークFalconでAPI開発 入門(その2)

More than 1 year has passed since last update.


概要

この記事はPythonフレームワークの一つであるFalconの扱い方についてまとめた記事です。今回の記事は前回のその2になります。

Falconは非常にシンプルな構成であり、多機能では無いもののいくつかの機能を備えています。

今回はリクエストパラメーターの取得方法とHooksという機能の扱い方について解説します。


パラメーターの取得

GETやPOSTのリクエストを受けた際、パラメーターの取得は以下のようにして行えます。

class AppResource(object):

def on_get(self, req, resp):
params = req.params
resp.body = json.dumps(params)

req.paramsでパラメーターの取得を行うことができます。

例えば以下のようなGETパラメーターを指定してリクエストを送ったとします。

以下の場合はkeyがtestであり、valueがhogeになります。


  • key: test

  • value: hoge

$ curl -v 127.0.0.1:8000?test=hoge

シェルのHTTPクライアントはcurlを使うのが一般的ですが、HTTPieの方が便利です。

HTTPieの扱い方は以下に載せてあります。

https://qiita.com/ytabuchi/items/02fa15ac209823a4d19f

$ http -v GET 127.0.0.1:8000 test==hoge

実際にコマンドを叩いてリクエストを送ってみると、req.paramsの中身は以下のような感じになっています。中身は辞書型となっているため、req.params['test']でキーを指定するとvalueであるhogeを取り出すことが可能です。

{'test': 'hoge'}


Hooksの機能

Hooksは指定したリソースの前後に任意の処理を追加できることの機能です。

リソースのクラス、又はメソッドに以下のデコレーターを指定することでHooksを使うことができます。Hooksには以下のように2種類のデコレーターがあります。


  • @falcon.before 指定したリソースの直前で呼び出される

  • @falcon.after 指定したリソースの直後に呼び出される


実装例

それでは実際にHooksを使用してみます。前回作成したapp.pyに追記していきます。


app.py

.

.
(省略)
import hooks.py

@falcon.before(hooks.before_resource)
@falcon.after(hooks.after_resource)
class AppResource(object):

def on_get(self, req, resp):

msg = {
"message": "Welcome to the Falcon"
}
resp.body = json.dumps(msg)


Hooks用のメソッドを定義したファイルを作成します。

ここではAppResourceクラスに対して処理が飛ぶと、AppResourceが呼び出される前にデコレーター@falcon.beforeで指定したhooks.pybefore_resourceメソッドが呼び出されます。

その後、AppResource内で処理が行われた後に、デコレーター@falcon.afterで指定したhooks.py内のafter_resourceメソッドに処理が飛びます。


hooks.py

def before_resource(req, resp, resource, params):

print('hook: before_resource')
print(req)
print(resp)
print(resource)
print(params)

def after_resource(req, resp, resource):
print('hook: after_resource')
print(req)
print(resp)
print(resource)



処理の順番

つまり処理の順番は上から以下のようになります。


  1. (falcon.before) before_resource

  2. (Resource) AppResource (on_****) on_get

  3. (falcon.after) after_resource


まとめ

今回紹介したのは以下の二つです。


  • パラメーターの取得方法

  • リソースの前後に任意の処理を挟むことができる機能

次回はミドルウェアの機能について紹介していきます。

参考

http://falcon.readthedocs.io/en/stable/api/hooks.html