環境準備
$ pipenv shell
$ pipenv install fastapi uvicorn
ソースコード
ポイントは、
- GET
- パスパラメーター
- POST
- ボディの受け取り方
main.py
from fastapi import FastAPI
from pydantic import BaseModel
import dataclasses
import uuid
class UserInput(BaseModel):
name: str
@dataclasses.dataclass
class User:
id: str
name: str
data = dict()
app = FastAPI()
@app.post("/users/")
async def create_user(user_input: UserInput) -> User:
user_id = str(uuid.uuid4())
user = User(user_id,user_input.name)
global data
data[user_id] = user
print(user_id)
return user
@app.get("/users/{user_id}")
async def read_user(user_id: str) -> User:
return data[user_id]
@app.delete("/users/{user_id}")
async def delete_user(user_id: str) -> None:
del data[user_id]
起動の仕方
ポイントは
- ポート番号の指定
- ホスト名の指定
ホスト名の指定をしないとドメイン指定等、公開するときにハマる。
$ uvicorn main:app --port=8080 --host=0.0.0.0
開発用はreloadをつける。
$ uvicorn main:app --reload --port=8080 --host=0.0.0.0
動作確認
コンテナ化
Dockerfile
FROM python:3.6-slim
COPY Pipfile .
COPY Pipfile.lock .
RUN pip install pipenv --no-cache-dir
RUN pipenv sync --system
COPY main.py .
CMD pipenv run uvicorn main:app --port=8080 --host=0.0.0.0
$ docker build -t fastapi_test .
$ docker run --rm -p 8080:8080 fastapi_test