JP / EN

広告
2024/08/15

FastAPI入門:最小構成でとりあえずサーバを立ててみる

タグ:python

以前にPythonでWebサーバを構築したくなり、Flaskでサーバを立てた。 個人的にはFlaskの使い勝手に満足していたが、その後プロジェクトに参加したときに 他のメンバーの希望でFastAPIを採用することになり使い始めた。せっかくなのでこちらの使い方もまとめておこうと思う。

FastAPIとFlaskの比較

比較と銘打っておいたが、実のところFastAPIを触った第一感としては「Flaskとかなり似ているな」ということろだった。
正直のところ、PythonでWebをやるのに最初に手を付けるのならどちらでもよい。
逆にいえば大して変わらない上にAPI構築に特化した機能が増えているので、そちらの機能が欲しければFlaskからの乗り換えは検討してもよいだろう。
比較のポイントをまとめると
  • FlaskとFast APIの書き方はかなり似ている
  • FlaskでもREST APIを立てられる:単にjsonを返せばよい
  • Fast APIでもAPI以外の人間向けWebサーバを立てられる:htmlのレンダリングや性的ファイルの配信も可能
  • Fast APIの強み:pydanticと連携して型検査やバリデーションの機能が充実している
  • Flaskの強み:(今のところ)より大きいユーザコミュニティからくるプラグインやドキュメントの充実度
といったところだろうか。

サーバを立てるまで

まずまだインストールしていなかったらpipでFast APIを手持ちのPython環境に入れる。
    $ pip install fastapi[standard]
  
なおfastapiにはいくつかのインストールおオプションがあるが、今回はデプロイツールなども入っていて お手軽なstandardで入れる。

次にシンプルなサーバを単独pyファイルで完結する形で書いてみる。 サンプルコードは以下
    from fastapi import FastAPI
    app = FastAPI()
    
    @app.post("/test")
    def test_post(data: str):
      print("post:", data)
      return {"data-post": data}

    
    @app.get("/test")
    def test_get(data: str):
      print("post:", data)
      return {"data-get": data}
  
Fast APIではFlaskと異なり自前のmain関数の中でサーバを立てるというようなことはできず、 外部のwebサービング用モジュール(WSGIなど) よってmainは実装せず、appにアクセスポイントを追加する処理のみを書く。
またreturnする値はdict型そのままでよく、FastAPI内部で自動でjsonに直してレスポンスを組み立ててくれる。

これが書けたらコマンドラインに戻り
    $  fastapi dev fastapi_sample.py
  
として開発モードでサーバを起動する。

次に立てたサーバにアクセスしてみる。まずはブラウザで/testに手っ取り早くアクセスしてみる。 http://127.0.0.1:8000/test?data=hogeにアクセスして{"data-get":"hoge"}が表示されればokである。 なおこのdataの様に特に指定せずに関数の引数として指定したパラメータは、 アドレス末尾に?に続いて付加するクエリパラメータになる点に注意する。 POSTはブラウザから投げにくいのでコマンドライン上でwebリクエストを組み立てられるcurlコマンドを使ってアクセスしてみよう。

    $ curl -X POST "http://127.0.0.1:8000/test?data=hoge"
    {"data-post":"hoge"}
  
のようにgetと同じようなレスポンスが返ってくれば成功である。

おすすめ記事

FlaskでWebサーバを立てるサンプル~最小限のコードで

Flaskサーバを外部公開~外から接続できないときのチェックポイント

PythonからGemini APIを叩く:requestsを使うのが簡単



このエントリーをはてなブックマークに追加

https://wonderhorn.net/