FastAPIでユーザーのCRUD操作を試してみた!インメモリで簡単API構築FastAPIでCURD操作

FastAPI

背景

こんにちは、白々さじきです!
今回は、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操作に挑戦してみようと思います。まだまだ学ぶことは多いですが、一歩ずつ進めていきたいです!

サポートのお願い

下記リンクからお買い物いただけると、ブログ運営のための費用が増え、有料サービスを利用した記事作成が可能になります。ご協力よろしくお願いします!

コメント

タイトルとURLをコピーしました