2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-23

概要

この記事は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のクラスを指定しています。(この後に実装例を記述します。)

app.py

import middleware
.
.
(省略)

app = falcon.API(middleware=[
    middleware.ExampleMiddleware()
])

Middlewareのクラスを定義したファイルを作成します。
まず最初にprocess_request,process_resourceの順に実行されます。その次にリソース(resource)が実行され、最後にprocess_responseに処理が行きます。

middleware.py


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()というクラスがあった場合、カンマで区切って追加します。

app.py

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

まとめ

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

  • ミドルウェアの作成方法
  • ミドルウェアは複数指定することが可能

次回はリクエストパラメーターの詳細について解説していこうかなと思います。

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?