Python FastAPI 最速入門
Python がある程度できるようになったから、FastAPIを学んでみたい!って人のためのページです。
1. 仮想環境を作る
まずは Python の仮想環境を作りましょう。
venv
パッケージを利用して環境を作ります。
# 仮想環境を作成
python -m venv venv
# 仮想環境を有効化
./venv/Scripts/activate
コンソールの前に (venv)
と付いていたら成功です。
2. FastAPIをインストール
仮想環境に、FastAPI
と Uvicorn
をインストールします。
python -m pip install fastapi 'uvicorn[standard]'
3. FastAPIを起動する
FastAPIで、サーバーを作成してみます。
ソースコードを配置する src
ディレクトリを作成します。
main.py
というファイルを作成します。
ファイル階層
project/
┣ venv/
┗ src/
┗ main.py
現在の状態はこの通りです。
main.py
from fastapi import FastAPI
import uvicorn
if __name__ == '__main__':
# FastAPI を作成
app = FastAPI()
# localhost:8000 で FastAPI を実行
uvicorn.run(app, host='localhost', port=8000)
main.py
の中に上のコードを書きます。
公式とは違う起動のしかたですが、問題なく起動します。
http://localhost:8000/
にアクセスすることができます。
何の機能もつけていないので {"detail":"Not Found"}
というJSONが返ってきます。
4. 静的ルータを作成する
静的ルータを作成してみましょう。
ファイルがあればファイルを返し、無ければ 404
を返すシンプルなサーバーのことです。
まずは、ファイルを公開するディレクトリ public
を作成します。
中には、test.txt
を作成します。
ファイル階層
project/
┣ venv/
┣ public/
┃ ┗ test.txt
┗ src/
┗ main.py
main.py
from fastapi import FastAPI
+ from fastapi.staticfiles import StaticFiles
import uvicorn
if __name__ == '__main__':
# FastAPI を作成
app = FastAPI()
+ app.mount("/main", StaticFiles(directory="public"), name="public")
# localhost:8000 で FastAPI を実行
uvicorn.run(app, host='localhost', port=8000)
http://localhost:8000/main
の後に ファイルパスを書けば、 public
内で同じパスにあるファイルを返そうとします。
http://localhost:8000/main/test.txt
にアクセスすると、 public/test.txt
が返ってくるはずです。
5. 動的ルータを作成する
動的ルータは、APIサーバーです。
アクセスしてきた人の情報やパラメータによって違う内容を返します。
今回は、 http://localhost:8000/api/routeA
を作成してみます。
src
ディレクトリの中に、 routers
ディレクトリを作成します。
この中に、動的ルータを作成していきます。
routers
ディレクトリの中には、route_a.py
, __init__.py
を作成します。
ファイル階層
project/
┣ venv/
┣ public/
┃ ┗ test.txt
┗ src/
┣ routers/
┃ ┣ __init__.py
┃ ┗ route_a.py
┗ main.py
route_a.py
from fastapi.routing import APIRouter
router = APIRouter()
@router.get('/api/routeA')
def get():
'''
GET /api/routeA
'''
return 'GET method!'
@router.post('/api/routeA')
def post():
'''
POST /api/routeA
'''
return 'POST method!'
route_a.py
はこんな感じです。
http://localhost:8000/api/routeA
のにアクセスが来た時の処理の中身を書きます。
router
はルータですね。
各関数にデコレータでURLのパスが指定されており、そのパス・メソッドにアクセスが来ると実行されます。
init.py
from .route_a import router as route_a_router
ALL_ROUTERS = [
route_a_router,
]
ALL_ROUTERS
は、ルータをまとめた配列です。
今後ルータが増えたら、この配列に追加していきます。
これらのルータを使用するために、 main.py
も改造する必要があります。
main.py
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
import uvicorn
+ from routers import ALL_ROUTERS
if __name__ == '__main__':
# FastAPI を作成
app = FastAPI()
app.mount("/main", StaticFiles(directory="public"), name="public")
+ # 他のルータを登録
+ for router in ALL_ROUTERS:
+ app.include_router(router)
# localhost:8000 で FastAPI を実行
uvicorn.run(app, host='localhost', port=8000)
これで、作成したルータが有効になりました。
http://localhost:8000/api/routeA
にアクセスしてみましょう。
- GET メソッドなら、 「GET method!」
- POST メソッドなら、「POST method!」
と返ってくるはずです。
これでAPIサーバーを自由に作成することができますね。
Discussion