Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

shimakaze_soft
Pythonエンジニア、最近はブロックチェーン、機械学習を勉強中
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした