コードはここにあります: GitHub - jamesbmour/blog_tutorials:
前回の投稿では、FastAPI を紹介し、基本的なプロジェクト構造をセットアップしました。ここで、機能的な Todo API を構築して、さらに一歩進めてみましょう。このチュートリアルを終了するまでに、ToDo アイテムを作成、読み取り、更新、削除できるバックエンドが動作するようになります。
todo を管理するには、todo アイテムを表すデータ モデルを定義する必要があります。 FastAPI は Pydantic モデルを使用してデータを検証および解析するため、ここではそれを利用します。
Pydantic を使用して 2 つのモデルを作成します。
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
CRUD は、データ管理の 4 つの基本操作である作成、読み取り、更新、および削除の略です。このチュートリアルでは、メモリ内データベース (単純なリスト) を使用してこれらの操作を実装します。
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(), }, ]
ID で todo を検索する簡単なヘルパー関数を実装します。
def get_todo_by_id(todo_id: str): for todo in todos: if todo["id"] == todo_id: return todo return None
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
GET エンドポイントは、メモリ内のデータベースからすべての Todo を取得します。
@app.get("/todos/", response_model=List[Todo]) def get_all_todos(): return todos
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
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)
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"}
FastAPI は、定義した Pydantic モデルに対して入力データを自動的に検証します。これにより、データが処理される前に、データが予想されるスキーマを満たしていることが保証されます。
例外ハンドラーを追加することで、エラー応答をカスタマイズできます。
@app.exception_handler(HTTPException) def http_exception_handler(request, exc: HTTPException): return JSONResponse( status_code=exc.status_code, content={"detail": exc.detail}, )
FastAPI にはインタラクティブな Swagger UI ドキュメントが付属しており、API エンドポイントのテストが簡単になります。アプリケーションを実行し、ブラウザで /docs に移動するだけです。
アプリケーションが成長するにつれて、コードを整理しておくことが重要です。ここにいくつかのヒントがあります:
Pydantic モデルを models.py ファイルに移動して、メイン アプリケーション ファイルをクリーンな状態に保つことができます。
特に API が成長するにつれて、todo 関連のエンドポイント用に別のルーターを作成することを検討してください。
次の投稿では、実際のデータベース (SQLite や PostgreSQL など) を FastAPI アプリケーションに統合します。ユーザー認証やより高度な機能についても検討します。
このチュートリアルでは、FastAPI を使用して単純な Todo API を構築しました。データ モデルの設計から開始し、CRUD 操作を実装し、ToDo を管理するためのエンドポイントを作成しました。入力検証、エラー処理、テストについても触れました。この基盤を使用すると、API をさらに拡張したり、フロントエンドと統合して本格的なアプリケーションを作成したりできます。
私の執筆をサポートしたり、ビールを買ったりしたい場合は:
https://buymeacoffee.com/bmours
以上がパート FastAPI を使用した Todo API の構築: ステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。