スクリプトのお勉強 技術

Python Falconによる REST APIの作成

投稿日:

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には使っていきたいと思います。

-スクリプトのお勉強, 技術

執筆者:

関連記事

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

PyWebIOでform 入力+ REST API呼び出しを作ってみる

仕事柄、簡単なWebアプリを作りたいと思うことはよくあり、その場合はその場で直せるスクリプトで書きたいとよく思うものです。 すごーく簡単なフォームを非常に簡単に使いたいので、まずは簡単に作れるフレーム …

Go 言語で作る!単一バイナリで動くモダンな Web UI アプリケーション

はじめに Web アプリケーションを開発する際、アーキテクチャの選択は常に悩ましい問題です。「巨大なモノリスは開発が進むにつれて複雑化し、マイクロサービスは管理が煩雑になる…。」そんなジレンマを抱えて …

Nuxt.jsのFormで入力/確認/完了フォームを作成してみた(その2)

前回の記事の続きです。以下について書いていきます。この記事で終わりのはず? バリデーション機能(主にIPアドレスのバリデーション追加)画面 バリデーション機能 バリデーション機能は、vee-valid …

Reflex(Python) をSQLite + ログイン機能付きで使ってみる

2024年現在のWebアプリ作成方法の一つとして、「PythonだけでWebアプリを完結する」作り方があります。 その一つとしてReflexというのがあります。 Reflexとは PythonのWeb …

    google オプトアウト Click here to opt-out.