首頁 >後端開發 >Python教學 >了解 FastAPI 基礎知識:FastAPI、Uvicorn、Starlette、Swagger UI 和 Pydantic 指南

了解 FastAPI 基礎知識:FastAPI、Uvicorn、Starlette、Swagger UI 和 Pydantic 指南

Barbara Streisand
Barbara Streisand原創
2024-11-03 22:01:03650瀏覽

Understanding FastAPI Fundamentals: A Guide to FastAPI, Uvicorn, Starlette, Swagger UI, and Pydantic

FastAPI 是一個現代的高效能 Web 框架,用於使用 Python 建立 API,使開發人員能夠以最少的努力創建強大且高效的應用程式。它的設計考慮了非同步編程,使其速度極快並且能夠同時處理多個請求。為 FastAPI 提供支援的關鍵元件包括 Uvicorn、Starlette、Swagger UI 和 Pydantic。在本指南中,我們將探索每個元件,並了解它們如何在 FastAPI 中組合在一起,並使用程式碼範例來示範關鍵概念。


1. FastAPI的核心

FastAPI 建立在兩個主要基礎上:

  • 非同步程式設計:利用Python的async和await,FastAPI可以同時處理多個要求,對於需要並發的應用程式非常有效率。
  • 類型註釋:FastAPI 使用 Python 的類型提示來自動驗證和序列化請求和回應數據,這使得開發更快、更安全。

讓我們從一個簡單的 FastAPI 應用程式開始,了解其結構:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

這是一個基本的 FastAPI 應用程序,具有單一路由 (/),傳回帶有 {"Hello": "World"} 的 JSON 回應。

要執行此應用程序,您將使用 Uvicorn,一個旨在為非同步 Web 應用程式提供服務的 ASGI 伺服器。


2. Uvicorn:ASGI 伺服器

Uvicorn 是一個快如閃電的 ASGI 伺服器,針對處理非同步程式碼進行了最佳化。它對於運行 FastAPI 應用程式至關重要,因為它處理傳入的 HTTP 請求並管理這些請求的生命週期。

要使用 Uvicorn 運行 FastAPI 應用程序,請使用以下命令:

uvicorn main:app --reload
  • main:app 指定 Uvicorn 應在 main.py 檔案中尋找應用程式實例。
  • --reload 在開發過程中啟用熱重載,因此每當您儲存變更時伺服器都會自動重新載入。

當您執行此命令時,Uvicorn 將開始為您的 FastAPI 應用程式提供服務,您可以透過 http://127.0.0.1:8000 存取它。


3. Starlette:FastAPI 的 Web 框架基礎

FastAPI 建構於 Starlette 之上,後者是一個輕量級 ASGI 框架,用於處理核心 HTTP 操作,包括路由、中間件和 WebSockets 支援。 Starlette 提供了 FastAPI 用於管理 HTTP 請求的低階工具,使其成為建立 Web 應用程式的穩定且高效能的基礎。

FastAPI 利用 Starlette 的路由系統來定義 API 端點。例如:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

在此範例中:

  • @app.get("/items/{item_id}") 定義帶有路徑參數 item_id 的路由。
  • FastAPI 透過將 Starlette 的路由系統與其類型檢查和驗證整合來處理此路徑參數類型(此處為 int)。

Starlette 還允許您新增中間件以進行各種操作,例如處理 CORS(跨來源資源共用)、請求日誌記錄或自訂身份驗證:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

Starlette 的這種靈活性使得 FastAPI 具有高度可配置性,允許開發人員根據需要輕鬆添加自訂中間件。


4. Swagger UI:互動式 API 文件

FastAPI 使用 Swagger UI 自動產生互動式 API 文件。該文件預設在 /docs 中提供,並允許開發人員直接從瀏覽器測試端點。

要查看實際效果,請啟動 FastAPI 應用程式並造訪 http://127.0.0.1:8000/docs。您將看到一個互動式 Swagger UI,其中列出了您的所有路線、其參數以及預期回應。

另一個文件接口,ReDoc,預設也在 /redoc 提供,提供更詳細的 API 規範視圖。


5. Pydantic:資料驗證與序列化

FastAPI 最強大的方面之一是它使用 Pydantic 進行資料驗證。 Pydantic 模型可讓您定義具有嚴格類型約束和自動驗證的請求和回應資料的結構。

讓我們在範例中加入 Pydantic 模型:

uvicorn main:app --reload

在此程式碼中:

  • Item模型繼承自BaseModel,定義了三個欄位:name、price、is_offer。這些欄位具有特定的資料類型和 is_offer 的可選預設值。
  • 當您使用 JSON 資料向 /items/{item_id} 發送請求時,FastAPI 使用 Pydantic 根據 Item 模型驗證數據,並在可能的情況下自動轉換資料類型。

嘗試使用位於 /docs 的 Swagger UI 發送這樣的請求:

@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

FastAPI 將驗證資料並在資料與預期類型不符時自動傳回任何錯誤。例如,如果價格以字串形式給出(如“20”),FastAPI 將回應詳細的驗證錯誤。


6. 將它們放在一起

讓我們透過添加更多路線並結合迄今為止學到的所有內容來擴展我們的應用程式:

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

使用此設定:

  • 路由和參數處理:@app.get("/items/{item_id}")端點示範路徑參數和查詢參數(例如q)。
  • 異常處理:使用 HTTPException 進行自訂錯誤回應(例如,當找不到項目時)。
  • CORS:CORS 中間件可讓您從不同的網域發出請求,這對於 Web 應用程式中的前後端通訊至關重要。

運行應用程式

要執行此應用程序,請使用 Uvicorn:

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def read_root():
    return {"Hello": "World"}

導航至 http://127.0.0.1:8000/docs 以查看互動式文檔,或使用 cURLPostman 等工具將請求傳送到不同的端點。


概括

FastAPI 將非同步程式設計的效能優勢與 Python 類型提示的簡單性結合,創建了一個快速、易於使用且適合生產應用程式的框架。透過整合 Uvicorn、Starlette、Swagger UI 和 Pydantic,FastAPI 提供了一種極其簡化的 API 開發方法,使其成為快速原型設計和生產級應用程式的絕佳選擇。

掌握了這些核心基礎知識後,您現在就可以更深入地了解 FastAPI 的世界並建立可擴展的高效能應用程式。

參考

  1. FastAPI 文件
  2. Uvicorn 文件
  3. Starlette 文件
  4. Pydantic 文件
  5. Swagger UI 文件

以上是了解 FastAPI 基礎知識:FastAPI、Uvicorn、Starlette、Swagger UI 和 Pydantic 指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn