FastAPIを初めて触る人向けの内容です(。・ω・。)ノシ
≪今回の実行環境≫
OS:Windows11
Python:3.10.8
IDE:VSCode
仮想環境:venv
ターミナル:cmd
1.仮想環境を用意する
任意のファイルを用意し、ターミナルで仮想環境を構築します。
仮想環境にも色々ありますが、今回はvenvを使用します。
※環境による差異を減らすためDockerが推奨されていますが、今回は簡易実行のためvenvとします。
例えば、Python3.10.8の場合は-3.10と記入します。
※2024年2月の時点で最新バージョンはPython 3.12.2なのでいい加減アップデートせねば~。良い子は最新版でやりましょう。
py -3.10 -m venv .venv
次に、
.venv\Scripts\activate.bat
をターミナルに入力し、アクティブにします。
コピペの場合、ターミナル上でマウスを右クリックすると簡単にペーストできるのでおすすめです。
実行後、ターミナルに(.venv)と出たら仮想環境の準備は完了です。
2.FastAPIをインストールする
仮想環境上でFastAPIをインストールしていきます。
ターミナルに下記を記入します。
pip install fastapi
この時もし、
WARNING: You are using pip version 21.2.4; however, version 24.0 is available.
You should consider upgrading via the ‘C:\Users\ユーザー名\Desktop\fsapi.venv\Scripts\python.exe -m pip install –upgrade pip’ command.
pipをアップグレードするよう警告が出た場合は、アップグレードしておきます。
ちなみに、pip install –upgrade pipを実行すると怒られました。
ERROR: Could not install packages due to an OSError: [WinError 5] アクセスが拒否されました。: ‘C:\Users\ユーザー名\AppData\Local\Temp\pip-uninstall-u1jgygzi\pip.exe’
Check the permissions.
pipをアップグレードする場合は、
python -m pip install --upgrade pip
が正解です。
Requirement already satisfied~が出たらOKです。
続いて、uvicornをインストールします。
pip install "uvicorn[standard]"
Successfully~が出たらOKです。
3.ファイルを実行し、それぞれの表示を確認する
最初に用意しておいた任意のフォルダ内に、main.pyなどのpyファイルを作成します。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hi": "OK"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
ファイルを保存したら、ターミナルで下記を実行します。
uvicorn main:app --reload
先ずは、http://127.0.0.1:8000/items/5?q=somequeryをブラウザのURL欄にコピペしてJSONのレスポンスを確認してみましょう。
ブラウザ上に{“item_id”:5,”q”:”somequery”}と表示されていればOKです。
続いて、Swagger UIが提供している自動対話型のAPIドキュメントを確認します。
http://127.0.0.1:8000/docsをブラウザのURL欄にコピペして表示を確認してみましょう。
素晴らしいUIに幸せを感じます(。・ω・。)
続いて、http://127.0.0.1:8000/redocをブラウザのURL欄にコピペして、ReDocが提供している代替の自動ドキュメントを確認します。この時、表示まで10秒ほど待機する場合がありますが心配ありません。
4. Pydanticを導入する
PUTリクエストを受け取るためにPydanticを導入します。
サーバーは自動でリロードされるため再読み込みは不要です。
pyファイルの中身をこのように書き換えてみます。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.get("/")
def read_root():
return {"Hi": "OK"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
保存をしたら、http://127.0.0.1:8000/docsを開いて確認してみましょう。
自動対話型のAPIドキュメントがアップデートされています。
ではここで、Try it outボタンをクリックして実行してみましょう。
下側に移動してレスポンスを確認し、Code200で成功していることを確認します。
今度はhttp://127.0.0.1:8000/redocでチェックしてみましょう。
アップデートされていることが確認できました。
基本的な準備と操作は以上となります。
公式ドキュメント
FastAPI