背景
こんにちは、白々さじきです!
今回は、FastAPIを使ってユーザーに関するCRUD操作を試してみました。インメモリ環境でデータを管理しながら、Create(作成)、Read(取得)、Update(更新)、Delete(削除)の基本操作を学びました。
この記事では、前回作成したmain.py
を更新して、CRUD操作を実現するコードを追加していきます。まだFastAPIの環境を構築していない方は、前回の記事を参考に環境を準備してから読み進めてください。それでは早速始めてみましょう!
事前準備
前回作成したmain.py
を開き、以下のコードを追加してインメモリのデータベースを準備します:
# インメモリのユーザーデータベース
users = []
次に、ユーザーモデルを定義します。これもmain.py
に追加してください:
from pydantic import BaseModel
# ユーザーモデルの定義
class User(BaseModel):
username: str
email: str
password: str
ユーザー作成(Create)
新しいユーザーを作成するためのAPIを作成します。重複するユーザー名がないかをチェックし、問題がなければユーザーを追加します。以下のコードをmain.py
に記載してください:
from fastapi import HTTPException
# Create: ユーザー作成
@app.post("/users/")
def create_user(user: User):
# ユーザー名の重複チェック
if any(u['username'] == user.username for u in users):
raise HTTPException(status_code=400, detail="Username already exists")
# ユーザー情報の保存
users.append(user.dict())
return {"message": "User registered successfully"}
コードを追加したら、サーバーを起動します:
uvicorn main:app --reload
ブラウザでhttp://127.0.0.1:8000/docs
にアクセスすると、Swagger UI形式のAPIドキュメントが表示されます。Try it out
ボタンから直接APIをテストできます。
以下の青色のExecuteをクリックするとAPIが実行されます。
成功すると以下のようなResponseが表示される。
同じ名前を入れると以下のように404エラーが出ます。
ユーザー取得
次に、作成されたユーザーを取得するAPIを追加します。
ユーザー全取得
以下のコードをmain.py
に追加します:
# Read: 全ユーザー取得
@app.get("/users/")
def read_users():
return {"Users": users}
このAPIを実行すると、保存されたユーザーの一覧がJSON形式で以下のように表示されます。
特定ユーザーの取得
特定のユーザーを取得するAPIを実装します。ユーザー名を指定して検索し、存在しない場合はエラーを返します。こちらもmain.py
に追加します:
# Read: 特定のユーザー取得
@app.get("/users/{username}")
def read_user(username: str):
# ユーザーが存在するかのチェック
user = next((u for u in users if u["username"] == username), None)
if not user:
raise HTTPException(status_code=404, detail="User not found")
return {"user": user}
このAPIを実行すると以下のようにユーザーの情報が表示されます。
登録していない名前を指定すると以下のように404エラーが表示されます。
ユーザーの更新
次に、既存ユーザーのデータを更新するAPIを作成します。ユーザー名を指定し、新しいデータを入力して更新します。こちらもmain.py
に追加します:
@app.put("/users/{username}")
def update_user(username: str, updated_user: User):
for user in users:
if user["username"] == username:
user.update(updated_user.dict())
return {"message": "User updated successfully", "user": user}
raise HTTPException(status_code=404, detail="User not found")
以下のようにAPIを実行するとユーザー情報の更新ができます。
更新後に全体取得APIを実行すると、以下のように変更が反映されていることが確認できます。
存在しない名前の場合は、更新されずに404エラーが返されます。
ユーザー削除
最後に、指定したユーザーを削除するAPIを実装します。こちらもmain.py
に追加します::
@app.delete("/users/{username}")
def delete_user(username: str):
global users
users = [u for u in users if u["username"] != username]
return {"message": f"User {username} deleted successfully"}
以下のようにAPIを実行するとユーザーの削除ができます。
削除を実行後、再度同じユーザー名で削除しようとすると、404エラーが返されます。
感想
FastAPIを使ったCRUD操作は、非常にシンプルで分かりやすいと感じました。特にSwagger UI形式のドキュメントが自動生成される点が便利で、APIのテストがスムーズに進みます。
次回は、データベース(DB)と連携したCRUD操作に挑戦してみようと思います。まだまだ学ぶことは多いですが、一歩ずつ進めていきたいです!
サポートのお願い
下記リンクからお買い物いただけると、ブログ運営のための費用が増え、有料サービスを利用した記事作成が可能になります。ご協力よろしくお願いします!
コメント