ホームページ > バックエンド開発 > Python チュートリアル > パート FastAPI を使用した Todo API の構築: ステップバイステップ ガイド

パート FastAPI を使用した Todo API の構築: ステップバイステップ ガイド

王林
リリース: 2024-08-28 18:32:24
オリジナル
347 人が閲覧しました

Part Building a Todo API with FastAPI: Step-by-Step Guide

FastAPI を使用した Todo API の構築: ステップバイステップ ガイド

コードはここにあります: GitHub - jamesbmour/blog_tutorials:

I. はじめに

前回の投稿では、FastAPI を紹介し、基本的なプロジェクト構造をセットアップしました。ここで、機能的な Todo API を構築して、さらに一歩進めてみましょう。このチュートリアルを終了するまでに、ToDo アイテムを作成、読み取り、更新、削除できるバックエンドが動作するようになります。

取り上げる内容:

  • Todo データモデルの設計
  • CRUD オペレーションの実装
  • API エンドポイントの作成
  • 入力検証とエラー処理の追加
  • API のテスト
  • コードのリファクタリングと整理

II. Todo データモデルの設計

todo を管理するには、todo アイテムを表すデータ モデルを定義する必要があります。 FastAPI は Pydantic モデルを使用してデータを検証および解析するため、ここではそれを利用します。

A. Todo スキーマの定義

Pydantic を使用して 2 つのモデルを作成します。

  • TodoCreate: Todo を作成または更新するときの入力データ用。
  • Todo: id や created_at などのフィールドを含む、完全な todo アイテム用。
from pydantic import BaseModel
from typing import Optional
from datetime import datetime

class TodoCreate(BaseModel):
    title: str
    description: Optional[str] = None
    completed: bool = False

class Todo(BaseModel):
    id: str
    title: str
    description: Optional[str] = None
    completed: bool
    created_at: datetime

ログイン後にコピー

B. フィールドの説明

  • id: 各 Todo の一意の識別子。
  • タイトル: Todo の主な内容。
  • 説明: 追加の詳細 (オプション)。
  • completed: Todo のブール値ステータス (完了したかどうか)。
  • created_at: Todo がいつ作成されたかを示すタイムスタンプ。

Ⅲ. Todo の CRUD オペレーションの作成

CRUD は、データ管理の 4 つの基本操作である作成、読み取り、更新、および削除の略です。このチュートリアルでは、メモリ内データベース (単純なリスト) を使用してこれらの操作を実装します。

A. インメモリデータベースのセットアップ

ToDo を保存するためにリストを使用します。わかりやすくするために、todo の例もいくつか追加します。

from uuid import uuid4
from datetime import datetime

todos = [
    {
        "id": str(uuid4()),
        "title": "Learn FastAPI",
        "description": "Go through the official FastAPI documentation and tutorials.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Build a Todo API",
        "description": "Create a REST API for managing todo items using FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Write blog post",
        "description": "Draft a blog post about creating a Todo API with FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
]

ログイン後にコピー

B. ヘルパー関数の実装

ID で todo を検索する簡単なヘルパー関数を実装します。

def get_todo_by_id(todo_id: str):
    for todo in todos:
        if todo["id"] == todo_id:
            return todo
    return None

ログイン後にコピー

IV. APIエンドポイントの実装

A. 新しい Todo の作成

POST エンドポイントを使用すると、ユーザーは新しい Todo アイテムを作成できます。

@app.post("/todos/", response_model=Todo)
def create_todo(todo: TodoCreate):
    new_todo = Todo(
        id=str(uuid4()),
        title=todo.title,
        description=todo.description,
        completed=todo.completed,
        created_at=datetime.now()
    )
    todos.append(new_todo.dict())
    return new_todo

ログイン後にコピー

B. すべての Todo を取得する

GET エンドポイントは、メモリ内のデータベースからすべての Todo を取得します。

@app.get("/todos/", response_model=List[Todo])
def get_all_todos():
    return todos

ログイン後にコピー

C. 単一の Todo の取得

GET エンドポイントを使用すると、ID によって 1 つの Todo を取得できます。

@app.get("/todos/{todo_id}", response_model=Todo)
def get_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    return todo

ログイン後にコピー

D. Todo を更新する

PUT エンドポイントを使用すると、ユーザーは既存の Todo を更新できます。

@app.put("/todos/{todo_id}", response_model=Todo)
def update_todo(todo_id: str, todo_data: TodoCreate):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todo["title"] = todo_data.title
    todo["description"] = todo_data.description
    todo["completed"] = todo_data.completed
    return Todo(**todo)

ログイン後にコピー

E. Todo を削除する

DELETE エンドポイントを使用すると、ユーザーは ID に基づいて Todo を削除できます。

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todos.remove(todo)
    return {"detail": "Todo deleted successfully"}

ログイン後にコピー

V. 入力検証とエラー処理の追加

A. Pydantic による入力検証

FastAPI は、定義した Pydantic モデルに対して入力データを自動的に検証します。これにより、データが処理される前に、データが予想されるスキーマを満たしていることが保証されます。

B. カスタムエラー処理

例外ハンドラーを追加することで、エラー応答をカスタマイズできます。

@app.exception_handler(HTTPException)
def http_exception_handler(request, exc: HTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

ログイン後にコピー

VI. API のテスト

FastAPI にはインタラクティブな Swagger UI ドキュメントが付属しており、API エンドポイントのテストが簡単になります。アプリケーションを実行し、ブラウザで /docs に移動するだけです。

テスト例

  • Todo を作成する: 新しい Todo を作成して POST エンドポイントをテストします。
  • Todo の取得: GET エンドポイントを使用して、ID によってすべての Todo または特定の Todo を取得します。
  • 更新と削除: PUT エンドポイントと DELETE エンドポイントをテストして、ToDo を更新または削除します。

VII.コードのリファクタリングと整理

アプリケーションが成長するにつれて、コードを整理しておくことが重要です。ここにいくつかのヒントがあります:

A. モデルを別のファイルに移動する

Pydantic モデルを models.py ファイルに移動して、メイン アプリケーション ファイルをクリーンな状態に保つことができます。

B. Todo エンドポイント用のルーターの作成

特に API が成長するにつれて、todo 関連のエンドポイント用に別のルーターを作成することを検討してください。

Ⅷ.次のステップ

次の投稿では、実際のデータベース (SQLite や PostgreSQL など) を FastAPI アプリケーションに統合します。ユーザー認証やより高度な機能についても検討します。

提案される改善点:

  • GET エンドポイントにフィルタリングとページネーションを追加します。
  • 個人の ToDo を管理するためにユーザー認証を実装します。

IX.結論

このチュートリアルでは、FastAPI を使用して単純な Todo API を構築しました。データ モデルの設計から開始し、CRUD 操作を実装し、ToDo を管理するためのエンドポイントを作成しました。入力検証、エラー処理、テストについても触れました。この基盤を使用すると、API をさらに拡張したり、フロントエンドと統合して本格的なアプリケーションを作成したりできます。

私の執筆をサポートしたり、ビールを買ったりしたい場合は:
https://buymeacoffee.com/bmours

以上がパート FastAPI を使用した Todo API の構築: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート