すぐにできる!Python3とFalconを使ったAPIサーバ構築

こんにちは!
最近、”Python3″と”Falcon”を使ってAPIサーバを構築する機会があったので、その手段と手軽さを紹介します。

Falconとは

FalconはWebアプリのためのフレームワークの一つです。
“Flask”や”Bottle”のほうが圧倒的に聞き馴染みがあるんですが、このFalconは余計な機能がないのでとっても軽量、今回のAPIサーバを構築するにはぴったりでした。

参考 Falcon frameworkfalconframework.org

実際に作る

準備

MEMO
Python3とpip3がインストールされている前提です

最初に、Falconのパッケージをインストールします。

pip3 install falcon

あと、起動には”Gunicorn”を使用するので、そちらもインストールします。

pip3 install gunicorn

(ちなみにGunicornはPython製のWSGIサーバです)

参考 Gunicorngunicorn.org
MEMO
更新(2018/08/04)

最近MacOS上でgunicornをインストールしようとしたところインストール自体は成功するのですが、以下のようなcommand not foundのメッセージが表示されます。

Error message

-bash: gunicorn: command not found

その場合は、/usr/local/binなどにリンクを設置する必要があります。

Link gunicorn

pip uninstall gunicorn
#実際に削除はせずに(y/nでnにする)、表示されたコマンドパスをコピー。
#最後がgunicornで終わるパス。
#/path/to/bin/gunicorn

ln -s 表示されたコマンドパス /usr/local/bin/gunicorn

このようにすればとりあえず、コマンドとして登録できたのでコマンドライン上で使えるようになります。

ソースコード

# -*- coding:utf-8 *-
import falcon

class CORSMiddleware:
    def process_request(self, req, resp):
    resp.set_header('Access-Control-Allow-Origin', '*')

class Message(object):

    def on_get(self, req, resp):
       resp.body = '{"message": "Hello world!"}'
       resp.status = falcon.HTTP_200

api = falcon.API(middleware=[CORSMiddleware()])
api.add_route("127.0.0.1", Resourse())

if __name__ == "__main__":
    from wsgiref import simple_server
    httpd = simple_server.make_server("127.0.0.1", 8080, api)
    httpd.serve_forever()
MEMO
このソースコードでは、”Access-Control-Allow-Origin”を全てに設定していますが、必要なければ、Class CORSMiddlewareごと消してしまっても大丈夫です。
※あとmiddleware=[CORSMiddleware()]を消してください

今回は on_getにしてありますが、POSTで何が受け取って処理して返すことも可能です。
その場合は、on_postを使用すればOK

class Message(object):
    def on_post(self, req, resp):
        pass

さらに詳しい情報は英語になりますが、こちらをどうぞ!

参考 Falconの詳しい情報falcon.readthedocs.io

動作テスト

ターミナル上でGunicornを使って起動します。

gunicorn Pythonファイル名:インスタンス名

起動すると今回のソースコードの場合は8080ポートがListen状態になります。

postmanなどのソフトを使って検証してみると実際に結果が得られると思います。

結果

かなり簡単にAPIサーバを構築できることが伝わったでしょうか?
実際に構築開始の事前調べから構築終了まで3,4時間ほどで終わりました。
(Access-Control-Allow-Originの問題解決とherokuへのデプロイ方法を検索したり失敗したりしなければもうちょっと早く終わったんじゃないかなと思います笑)
逆に他のフレームワークを使った場合とどれくらいのコード量で動作にどれくらいの差が生まれるのかは試してみないと確かなことはわからないのですが、Falconではベースがこのくらいのコード量とわかりました!

次回は実際に作ったAPIをつかったWebサイトの概要を書きたいと思います。
では!

コメントを残す