使用 FastAPI 建立 Todo API 的部分:逐步指南

王林
發布: 2024-08-28 18:32:24
原創
286 人瀏覽過

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

使用 FastAPI 建立 Todo API:逐步指南

程式碼可以在這裡找到:GitHub - jamesbmour/blog_tutorials:

一、簡介

在上一篇文章中,我們介紹了 FastAPI 並建立了基本的專案架構。現在,我們將更進一步,建立一個功能性的 Todo API。在本教程結束時,您將擁有一個可以建立、讀取、更新和刪除待辦事項的工作後端。

我們將涵蓋的內容:

  • 設計 Todo 資料模型
  • 實作CRUD操作
  • 建立 API 端點
  • 新增輸入驗證和錯誤處理
  • 測試 API
  • 重建與組織程式碼

二.設計 Todo 資料模型

為了管理待辦事項,我們必須定義一個表示待辦事項的資料模型。 FastAPI 使用 Pydantic 模型來驗證和解析數據,因此我們將在這裡利用它。

A. 定義 Todo 模式

我們將使用 Pydantic 建立兩個模型:

  • TodoCreate:用於建立或更新待辦事項時的輸入資料。
  • Todo:用於完整的待辦事項,包括 id 和created_at 等欄位。
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:每個待辦事項的唯一識別碼。
  • 標題:待辦事項的主要內容。
  • 描述:其他詳細資訊(可選)。
  • 已完成:待辦事項的布林狀態(無論是否完成)。
  • created_at:指示待辦事項建立時間的時間戳記。

三.為 Todos 建立 CRUD 操作

CRUD 代表建立、讀取、更新和刪除-管理資料的四個基本操作。在本教程中,我們將使用記憶體資料庫(一個簡單的列表)來實現這些操作。

A. 設定記憶體資料庫

我們將使用一個清單來儲存我們的待辦事項。為了簡單起見,我們還將添加一些範例待辦事項。

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 尋找待辦事項。

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

登入後複製

四.實作 API 端點

A. 建立新的待辦事項

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

登入後複製

B. 檢索所有待辦事項

GET 端點從我們的記憶體資料庫中檢索所有待辦事項。

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

登入後複製

C. 檢索單一待辦事項

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

登入後複製

D. 更新待辦事項

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)

登入後複製

E. 刪除待辦事項

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"}

登入後複製

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},
    )

登入後複製

六.測試 API

FastAPI 隨附互動式 Swagger UI 文檔,可輕鬆測試您的 API 端點。只需運行應用程式並在瀏覽器中導航至 /docs。

測試範例

  • 建立待辦事項:透過建立新的待辦事項來測試 POST 端點。
  • 擷取待辦事項:使用 GET 端點取得所有待辦事項或按 id 取得特定待辦事項。
  • 更新和刪除:測試 PUT 和 DELETE 端點以更新或刪除待辦事項。

七.重構和組織程式碼

隨著應用程式的成長,保持程式碼的組織性至關重要。這裡有一些提示:

A. 將模型移到單獨的文件

您可以將 Pydantic 模型移至 models.py 檔案中,以保持主應用程式檔案乾淨。

B. 為 Todo 端點建立路由器

考慮為待辦事項相關端點建立一個單獨的路由器,尤其是隨著您的 API 的成長。

八.下一步

在下一篇文章中,我們將把一個真實的資料庫(如 SQLite 或 PostgreSQL)整合到我們的 FastAPI 應用程式中。我們還將研究用戶身份驗證和更高級的功能。

建議的改進:

  • 為 GET 端點新增篩選和分頁。
  • 實作使用者身分驗證來管理個人待辦事項。

九.結論

在本教學中,我們使用 FastAPI 建立了一個簡單的 Todo API。我們首先設計一個資料模型,實作 CRUD 操作,並建立端點來管理待辦事項。我們還涉及輸入驗證、錯誤處理和測試。有了這個基礎,您可以進一步擴展 API 或將其與前端整合以創建成熟的應用程式。

如果你想支持我的寫作或買瓶啤酒給我:
https://buymeacoffee.com/bmours

以上是使用 FastAPI 建立 Todo API 的部分:逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!