implの藤谷です。
最近気に入っているFastAPIの環境構築について解説します。
友人と行っている開発のバックエンドにもゴリ押しでFastAPIを導入しました。
概要
FastAPI
FastAPIは、Python 3.6以降で動作する、モダンで高速なWebフレームワークです。
Pythonのtype hinting機能を使用してリクエストパラメータの型チェックや自動変換を行い、またOpenAPIやJSON Schemaを自動生成します。
メリット
- Starlette(軽量なASGIフレームワーク)とPydantic(データバリデーションライブラリ)に基づいて構築されており非常に高速。NodeやGoと同等のパフォーマンスを有する。
- 型ヒントと自動エラーチェックを利用することで、バグを早期に発見し、開発速度を上げることが可能。
- OpenAPIに基づいて、APIのエンドポイントとモデルのスキーマを自動的にドキュメンテーション化する。
- Pythonの非同期処理(async await)をフルにサポートしている
実装
docker
Dockerfileでは、python3.12のimageを指定しています。
// docker-compose.yml
version: "3.9"
services:
python:
container_name: python_container
build: ./Docker/python
ports:
- "8000:8000"
volumes:
- ./api:/usr/src/python/api
working_dir: /usr/src/python/api
db:
container_name: mysql_container
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- python-hobby-volume:/var/lib/mysql
- ./Docker/mysql/my.conf:/etc/mysql/my.conf
volumes:
python-hobby-volume:
ライブラリinstall
コンテナ内でfastApiとuvicornをインストールします。
$ pip install fastapi uvicorn
uvicorn
Pythonで作られたASGI(Asynchronous Server Gateway Interface)サーバで、FastAPIのようなASGIフレームワークが必要とするWebサーバを提供する。
API実装
疎通確認の為に一つAPIを実装します。
importしたFastAPIクラスからインスタンスを生成し、localhost:8000/ へのアクセス時にGETでメッセージを返す簡単な処理です。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello():
return {"message": "hello ranble"}
uvicornサーバを起動して確認します。
$ uvicorn main:app --reload
INFO: Started server process [13]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: 192.168.128.1:60142 - "GET / HTTP/1.1" 200 OK
INFO: 192.168.128.1:60144 - "GET / HTTP/1.1" 200 OK
OpenAPI自動出力
FastAPIの便利機能である、OpenAPIドキュメントの自動生成を確認してみます。
http://0.0.0.0:8000/docsにアクセスすると確認でき、APIが増えてもこのurlページに追加される形になります。
終わりに
今回は以上になります。
ここまで読んで頂き、ありがとうございました。