41
33

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開発 入門(その1)

Last updated at Posted at 2018-03-07

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.18000番ポートに向かってGETリクエストを飛ばすと、メッセージ付きのjsonが返ってくるというものです。非常に簡単に実装できます。

app.py
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という機能がありますが、次回にご紹介します。

41
33
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
41
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?