概要
この記事はPythonフレームワークの一つであるFalconの扱い方についてまとめた記事です。今回の記事は前回のその3になります。
Falconって何?って方は以下から読んで見てください。
Python軽量フレームワークFalconでAPI開発 入門(その1)
今回はMiddleware
という機能の扱い方について解説します。
Middlewareとは?
Middlewareとは、__全てのリクエストに対して任意の処理を追加できる機能__のことです。
それに対してHooksは、__指定したリソースに対して適用__されます。Middlewareは、__アプリケーション全体に対して処理が適用__されます。
Middlewareには以下の3つのメソッドを定義します。
- process_request リクエストを受信後に実行
- process_resource リソース(Resource)の到達前に実行
- process_response レスポンスを返す前に実行(つまりリソースの処理後に実行)
process_request, process_responseに関しては、__リクエストのURLに対するリソースが無い場合でも必ず実行__されます。
process_resourceは、URLに対するリソースが無い場合は実行されません。
実装例
それでは実際にMiddlewareを使用してみましょう。
middlewareはアプリケーション全体に適用されるため、以下のようにしてfalcon.APIの引数にmiddlewareのクラスを指定します。
middleware自体はリソース(resource)同様に、何も継承していないただのPythonクラスです。ここではExampleMiddlewareというmiddlewareのクラスを指定しています。(この後に実装例を記述します。)
import middleware
.
.
(省略)
app = falcon.API(middleware=[
middleware.ExampleMiddleware()
])
Middlewareのクラスを定義したファイルを作成します。
まず最初にprocess_request
,process_resource
の順に実行されます。その次にリソース(resource)が実行され、最後にprocess_response
に処理が行きます。
class ExampleMiddleware(object):
def process_request(self, req, resp):
print('process_request')
print(req)
print(resp)
def process_resource(self, req, resp, resource, param):
print('process_resource')
print(req)
print(resp)
print(resource)
print(param)
def process_response(self, req, resp, resource):
print('process_response')
print(req)
print(resp)
print(resource)
Middlewareの複数指定
Middlewareは以下のように複数指定することができます。
もしExampleMiddlewareTwo()というクラスがあった場合、カンマで区切って追加します。
import middleware
.
.
(省略)
app = falcon.API(middleware=[
middleware.ExampleMiddleware(),
middleware.ExampleMiddlewareTwo(),
])
Middlewareを複数指定した場合、以下のような順番でMiddlewareは実行されていきます。
ExampleMiddleware.process_request
ExampleMiddlewareTwo.process_request
ExampleMiddleware.process_resource
ExampleMiddlewareTwo.process_resource
<Resource() class>
ExampleMiddlewareTwo.process_response
ExampleMiddleware.process_response
まとめ
今回紹介したのは以下二つです。
- ミドルウェアの作成方法
- ミドルウェアは複数指定することが可能
次回はリクエストパラメーターの詳細について解説していこうかなと思います。