1.はじめに
最近、仕事では、あまり技術的なことをしてませんで。。
今回は、pythonのFalconというWebアプリケーションフレームワークを使用し、REST APIを作成します。
前回は、Djangoで作成しましたが、あまり簡単とは言えませんでした。
今回は、REST APIだけを速攻で作ることが目的です。
1.1 Falconの特徴
Falconの特徴は以下です。
- 直感的なルーティング
- 直感的なリクエスト、及び、レスポンスオブジェクト
「直感的な」というのは、「こう実装したいな」というのがそのまま書ける、という意味だと思ってますが、そういうのは意外と少ないので、そこらへんがいいかなと思います。
2.環境
環境は以下で作成しました。
- OS:Ubuntu 18.04
- Python 3.6
- Falcon 2.0
2.1 作成準備
$ pipenv install falcon $ pipenv install uwsgi
3. API作成/起動
APIを作成し、uwsgiで起動する手順を示します。
3.1 API作成
APIの中身は以下にしてあります。
import json import falcon class Resource: def on_get(self, req, resp): data = { 'route': [ { 'host': '192.168.1.1' } ] } resp.body = json.dumps(data, ensure_ascii=False) resp.status = falcon.HTTP_200 api = application = falcon.API() resource = Resource() api.add_route('/data', resource) if __name__ == "__main__": from wsgiref import simple_server httpd = simple_server.make_server("127.0.0.1", 8000, api) httpd.serve_forever()
Resourceというクラスに、REST API的な”data”というリソースを割り付ける感じです。
なかなか直感的ですね。
3.2 uwgsiで起動
api.yamlというファイルを作成し、起動してみます。
以下がapi.yamlです。chdirは起動するカレントディレクトリを指定します。
uwsgi: chdir: /home/tanino/script-plactice/practice_the_script/python/falcon wsgi-file: /home/tanino/script-plactice/practice_the_script/python/falcon/api.py callable: api http: 0.0.0.0:8099
callable、というのは、呼び出しクラスを指定します。上記では以下のように設定したので、”api”と指定しています。
api = application = falcon.API()
httpにて、ポート8099番でアクセスを受ける設定にしています。
本番であれば、nginxか何かに接続するのにsocketを使用したほうがいいと思います。
起動方法は以下です。
$ pipenv run uwsgi --yaml api.yaml
思ったより、uwsgiで起動するのが苦労したという。。
上記yamlファイルで''
で囲むと失敗しました。。
3.3 APIアクセス
以下のようにアクセスできます。
$ curl http://localhost:8099/data {"route": [{"host": "192.168.1.1"}]}
4. おわりに
ちょっと苦労しましたが、API自体はとても簡単です。簡単なAPIには使っていきたいと思います。