程式碼可以在這裡找到:GitHub - jamesbmour/blog_tutorials:
在上一篇文章中,我們介紹了 FastAPI 並建立了基本的專案架構。現在,我們將更進一步,建立一個功能性的 Todo API。在本教程結束時,您將擁有一個可以建立、讀取、更新和刪除待辦事項的工作後端。
為了管理待辦事項,我們必須定義一個表示待辦事項的資料模型。 FastAPI 使用 Pydantic 模型來驗證和解析數據,因此我們將在這裡利用它。
我們將使用 Pydantic 建立兩個模型:
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 代表建立、讀取、更新和刪除-管理資料的四個基本操作。在本教程中,我們將使用記憶體資料庫(一個簡單的列表)來實現這些操作。
我們將使用一個清單來儲存我們的待辦事項。為了簡單起見,我們還將添加一些範例待辦事項。
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 尋找待辦事項。
def get_todo_by_id(todo_id: str): for todo in todos: if todo["id"] == todo_id: return todo return None
POST 端點允許使用者建立新的待辦事項。
@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 端點從我們的記憶體資料庫中檢索所有待辦事項。
@app.get("/todos/", response_model=List[Todo]) def get_all_todos(): return todos
GET 端點允許透過 ID 檢索單一待辦事項。
@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 端點可讓使用者更新現有的待辦事項。
@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 刪除待辦事項。
@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 的成長。
在下一篇文章中,我們將把一個真實的資料庫(如 SQLite 或 PostgreSQL)整合到我們的 FastAPI 應用程式中。我們還將研究用戶身份驗證和更高級的功能。
在本教學中,我們使用 FastAPI 建立了一個簡單的 Todo API。我們首先設計一個資料模型,實作 CRUD 操作,並建立端點來管理待辦事項。我們還涉及輸入驗證、錯誤處理和測試。有了這個基礎,您可以進一步擴展 API 或將其與前端整合以創建成熟的應用程式。
如果你想支持我的寫作或買瓶啤酒給我:
https://buymeacoffee.com/bmours
以上是使用 FastAPI 建立 Todo API 的部分:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!