返回文章列表

FastAPI 建構高效能 Python Web API

本文介紹如何使用 FastAPI 框架建構高效能的 Python Web API,涵蓋路由、請求體驗證、CRUD 應用程式開發以及資料函式庫操作等核心概念,並提供程式碼範例說明 FastAPI 的基本用法。

Web 開發 API 開發

FastAPI 框架以其簡潔易用的特性,在 Python Web 開發領域備受關注。它不僅能快速建構高效能的 API,還支援自動化檔案生成和資料驗證等功能。本文將引導讀者逐步瞭解 FastAPI 的核心概念,包含路由設定、請求處理、資料函式庫互動,並示範如何建構一個簡單的 CRUD 應用程式。透過 Pydantic 模型的整合,FastAPI 可以輕鬆驗證請求體的資料結構,確保 API 的穩定性和安全性。此外,文章也說明如何使用 SQLModel 進行資料函式庫操作,實作資料的持久化。

使用 FastAPI 開發高效能 Python Web API

快速:高效建構強壯的 Web API

FastAPI 是一個現代化的 Python Web 框架,專為開發高效能且穩健的 Web API 而設計。它提供了極簡的程式碼結構,讓開發者能夠快速建立 API。本篇文章將介紹 FastAPI 的核心概念、基本用法,以及如何利用它來建立一個簡單的 CRUD(建立、讀取、更新、刪除)應用程式。

FastAPI 的基本架構

路由(Routing)

在 FastAPI 中,路由是指將特定的 URL 路徑對應到特定的處理函式。FastAPI 使用 APIRouter 類別來管理路由。

from fastapi import FastAPI, APIRouter

app = FastAPI()
router = APIRouter()

@router.get("/items/")
async def read_items():
    return [{"item_id": 1, "name": "Item One"}]

app.include_router(router)

內容解密:

  1. 匯入必要的模組:首先,我們從 fastapi 匯入 FastAPIAPIRouterFastAPI 是主要的應使用案例項,而 APIRouter 用於定義和組織路由。
  2. 建立 FastAPI 應使用案例項:使用 FastAPI() 建立一個應使用案例項。
  3. 定義路由:使用 @router.get("/items/") 定義了一個 GET 請求的路由,當存取 /items/ 路徑時,會呼叫 read_items 函式。
  4. 將路由註冊到應用:使用 app.include_router(router) 將定義好的路由註冊到主應使用案例項中。

請求與回應處理

請求體(Request Body)驗證

FastAPI 使用 Pydantic 模型來驗證請求體。

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    is_offer: bool = None

@app.post("/items/")
async def create_item(item: Item):
    return item

內容解密:

  1. 定義 Pydantic 模型:使用 BaseModel 定義一個名為 Item 的模型,該模型具有 namepriceis_offer 三個屬性。
  2. 在路由中使用模型:在 create_item 函式中,引數 item 的型別被註解為 Item,表示該函式期望接收一個符合 Item 模型的 JSON 物件作為請求體。
  3. 自動驗證:FastAPI 自動驗證請求體是否符合 Item 模型的定義,如果不符合,將傳回錯誤回應。

建構 CRUD 應用程式

CRUD 是建立、讀取、更新、刪除的縮寫,代表了資料函式庫操作的基本功能。下面是一個簡單的 CRUD 應用程式範例。

資料模型

from sqlmodel import SQLModel, Field

class Event(SQLModel, table=True):
    id: int = Field(default=None, primary_key=True)
    title: str
    description: str

內容解密:

  1. 匯入 SQLModel:從 sqlmodel 匯入 SQLModelField,用於定義資料函式庫模型。
  2. 定義資料模型:定義了一個名為 Event 的 SQLModel,具有 idtitledescription 三個欄位。
  3. id 欄位設定id 欄位被設為主鍵,並且預設值為 None,表示它將由資料函式庫自動生成。

資料函式庫操作

FastAPI 可以與多種資料函式庫搭配使用,包括關係型資料函式庫和 NoSQL 資料函式庫。下面展示如何使用 SQLModel 與資料函式庫互動。

from sqlmodel import Session, create_engine

engine = create_engine("sqlite:///example.db")

def create_event(event: Event):
    with Session(engine) as session:
        session.add(event)
        session.commit()
        session.refresh(event)
        return event

內容解密:

  1. 建立資料函式庫引擎:使用 create_engine 建立一個連線到 SQLite 資料函式庫的引擎。
  2. 定義建立事件的函式create_event 函式接收一個 Event 物件,將其新增到資料函式庫會話中,然後提交變更並重新整理物件以取得其新的狀態。

FastAPI 技術:建構高效的 Python Web API

FastAPI 是一個快速且高效的 Python Web 框架,用於建構 API。本文將探討如何使用 FastAPI 框架開發應用程式,從基礎到進階,涵蓋路由系統、回應模型、錯誤處理和範本渲染等主題。

本文目標與讀者

本文主要針對對建構 Web API 感興趣的 Python 開發者。理想的讀者應具備 Python 程式語言的基礎知識。

本文涵蓋內容

  • 第一章:FastAPI 入門 - 介紹 FastAPI 的基礎知識及本文使用的其他技術,並詳細說明如何設定開發環境。
  • 第二章:FastAPI 中的路由 - 詳細討論使用 FastAPI 路由系統建立端點的過程,包括請求主體和路徑引數的驗證。
  • 第三章:回應模型與錯誤處理 - 介紹 FastAPI 中的回應、回應模型、錯誤處理和狀態碼。
  • 第四章:FastAPI 中的範本渲染 - 討論如何使用範本建立檢視並從 API 渲染回應。
  • 第五章:結構化 FastAPI 應用程式 - 介紹如何結構化應用程式,並簡要介紹即將在後續章節中建立的應用程式。
  • 第六章:連線資料函式庫 - 討論 SQL 和 NoSQL 資料函式庫,並示範如何將 FastAPI 應用程式連線到這兩種資料函式庫。
  • 第七章:保護 FastAPI 應用程式 - 討論應用程式安全,包括授權和認證、實作認證和限制對應用程式端點的存取。
  • 第八章:測試 FastAPI 應用程式 - 解釋測試的重要性以及如何測試 API 端點。
  • 第九章:佈署 FastAPI 應用程式 - 討論佈署 FastAPI 應用程式的步驟。

使用本文的最佳方式

  • 確保您的電腦上安裝了最新版本的 Python。
  • 熟悉 Python 程式語言,以充分利用本文的內容。

下載範例程式碼

本文使用的慣例

  • 程式碼在文中:表示文中出現的程式碼單詞、資料函式庫表名、資料夾名稱、檔案名稱、檔案副檔名、路徑名稱、虛擬 URL、使用者輸入和 Twitter 處理等。
  • 程式碼區塊:以特定格式顯示,例如:
from fastapi import FastAPI
from routes.user import user_router
import uvicorn
  • 當需要強調程式碼區塊中的特定部分時,相關行或專案會以粗體顯示,例如:
from pydantic import BaseModel
from typing import List
class Event(BaseModel):
    id: int
    title: str
    image: str
    description: str
    tags: List[str]
    location: str
  • 命令列輸入或輸出以特定格式寫成,例如:
$ git add hello.txt
$ git commit -m "Initial commit"

聯絡我們

我們歡迎讀者的反饋。如果您對本文有任何疑問,請電子郵件至 [email protected],並在郵件主題中提及書名。

第一部分:FastAPI 簡介

完成本部分後,您將對 FastAPI 有深入的瞭解,包括路由、檔案處理、錯誤處理、建立回應模型和範本渲染。本部分首先介紹本文使用的技術,然後介紹 FastAPI 框架的基礎知識。

本部分包括以下章節:

  • 第一章:FastAPI 入門
  • 第二章:FastAPI 中的路由
  • 第三章:回應模型與錯誤處理
  • 第四章:FastAPI 中的範本渲染

使用 FastAPI 快速入門

FastAPI 是本文將要使用的 Python 網頁框架。它是一種快速、輕量級的現代化 API,與其他根據 Python 的網頁框架(如 Flask 和 Django)相比,具有更簡單的學習曲線。FastAPI 是一個相對較新的框架,但它擁有不斷壯大的社群。它被廣泛用於構建網頁 API 和佈署機器學習模型。

在第一章中,您將學習如何設定開發環境並構建第一個 FastAPI 應用程式。首先,您將學習 Git(版本控制系統)的基礎知識,以便在構建應用程式時能夠儲存、追蹤和檢索檔案變更。您還將學習如何使用 pip 處理 Python 中的套件,如何使用 Virtualenv 建立隔離的開發環境,以及 Docker 的基礎知識。最後,您將透過構建一個簡單的 Hello World 應用程式來瞭解 FastAPI 的基礎知識。

本章涵蓋以下主題:

  • Git 基礎知識
  • 使用 Virtualenv 建立隔離的開發環境
  • 使用 pip 進行套件管理
  • 設定和學習 Docker 的基礎知識
  • 構建一個簡單的 FastAPI 應用程式

技術需求

Git 基礎知識

Git 是一個版本控制系統,使開發人員能夠記錄、追蹤和還原到檔案的早期版本。它是一個分散式和輕量級的工具,可以安裝在任何作業系統上。

您將學習如何使用 Git 進行記錄儲存。在應用程式的每一層被構建時,將會進行變更,重要的是要記錄這些變更。

安裝 Git

要安裝 Git,請存取下載頁面 https://git-scm.com/downloads,並選擇適合您當前作業系統的下載選項。您將被重新導向到一個說明頁面,指導如何在您的機器上安裝 Git。

值得注意的是,Git 有 CLI 和 GUI 應用程式。因此,您可以下載最適合您的版本。

Git 操作

如前所述,Git 可用於記錄、追蹤和還原到檔案的早期版本。但是,本文只會介紹 Git 的基本操作,並在本文中進行介紹。

為了使 Git 正常執行,存放檔案的資料夾必須被初始化。初始化資料夾使 Git 能夠追蹤內容,除非另有豁免。

要在專案中初始化新的 Git 儲存函式庫,您需要在終端機中執行以下命令:

$ git init

要啟用檔案追蹤,首先必須新增和提交檔案。Git 提交使您能夠在時間範圍內追蹤檔案變更;例如,一小時前提交的檔案和當前檔案版本。

什麼是提交?

提交是在特定時間對檔案或資料夾狀態的唯一捕捉,並由唯一程式碼標識。

既然我們知道什麼是提交,我們就可以繼續提交檔案,如下所示:

$ git add hello.txt
$ git commit -m "初始提交"

您可以在進行變更後透過執行以下命令來追蹤檔案狀態:

$ git status

您的終端機應該與以下內容相似:

圖 1.1 – Git 命令

要檢視對檔案所做的變更(可以是新增或減少檔案內容),請執行以下命令:

$ git diff

您的終端機應該與以下內容相似:

圖 1.2 – git diff 命令的輸出

在每個資料夾中包含一個 .gitignore 檔案是一個良好的實踐。.gitignore 檔案包含 Git 要忽略的檔案和資料夾名稱。這樣,您就可以新增和提交資料夾中的所有檔案,而不必擔心提交像 .env 這樣的檔案。

要包含 .gitignore 檔案,請在終端機中執行以下命令:

$ touch .gitignore

要豁免檔案被 Git 追蹤,請將其新增到 .gitignore 檔案中,如下所示:

$ echo ".env" >> .gitignore

.gitignore 檔案中常見的檔案包括以下內容:

  • 環境檔案(*.env)
  • Virtualenv 資料夾(env、venv)
  • IDE 中繼資料資料夾(例如 .vscode.idea

Git 分支

分支是一項重要的功能,使開發人員能夠輕鬆地在不同的應用程式功能、錯誤等上單獨工作,然後再合併到主分支中。

分支系統在小型和大型應用程式中都被採用,並透過提取請求促進預覽和協作的文化。主要分支稱為主分支,它是建立其他分支的基礎。

要從現有分支建立新分支,請執行 git checkout -b newbranch 命令。讓我們透過執行以下命令建立一個新分支:

$ git checkout -b hello-python-branch

上述命令從現有分支建立一個新分支,然後將活動分支設定為新建立的分支。要切換回原始主分支,請執行 git checkout main 命令,如下所示:

$ git checkout main

重要注意事項: 執行 git checkout main 使 main 成為活動工作分支,而 git checkout -b newbranch 從當前工作分支建立一個新分支,並將新建立的分支設定為活動分支。

要了解更多,請參閱 Git 檔案:http://www.git-scm.com/doc。

既然我們已經瞭解了 Git 的基礎知識,我們現在可以繼續學習如何使用 virtualenv 建立隔離環境。#### 圖表說明:Git 分支流程圖

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam rectangleBackgroundColor #F5F5F5
skinparam rectangleBorderColor #333333
skinparam arrowColor #333333

title Git 分支

rectangle "建立" as node1
rectangle "開發" as node2
rectangle "合併" as node3

node1 --> node2
node2 --> node3

@enduml

此圖示展示了 Git 分支的基本流程,從主分支建立新分支,進行開發或錯誤修復後再合併回主分支。

內容解密:

  1. 建立新分支:使用 git checkout -b 命令從現有分支建立新分支。
  2. 開發與錯誤修復:在新分支上進行功能開發或錯誤修復。
  3. 合併回主分支:完成開發或修復後,將新分支合併回主分支。
  4. 更新主分支:確保主分支包含最新的功能和修復。

現在我們已經瞭解了 Git 的基本操作和分支管理,接下來將介紹如何使用 Virtualenv 建立隔離的開發環境。

使用 Virtualenv 建立隔離的開發環境

在 Python 中開發應用程式的傳統方法是將這些應用程式隔離在虛擬環境中。這樣做是為了避免全域安裝套件並減少應用程式開發過程中的衝突。

虛擬環境是一個隔離的環境,應用程式的相依套件安裝在其中,只能在該環境中存取。因此,應用程式只能存取該環境中的套件並與之互動。

建立虛擬環境

預設情況下,Python 3 的標準函式庫中安裝了 venv 模組。venv 模組負責建立虛擬環境。讓我們建立一個 todos 資料夾,並在其中建立一個虛擬環境,執行以下命令:

$ mkdir todos && cd todos
$ python3 -m venv venv

venv 模組接受一個引數,即虛擬環境要安裝到的資料夾名稱。在我們新建立的虛擬環境中,Python 直譯器的副本安裝在 lib 資料夾中,而啟用虛擬環境內互動的檔案儲存在 bin 資料夾中。

啟用和停用虛擬環境

要啟用虛擬環境,請執行以下命令:

$ source venv/bin/activate

上述命令指示 shell 預設使用虛擬環境的直譯器和套件。啟用虛擬環境後,venv 虛擬環境資料夾的字首會新增到提示符之前,如下所示:

啟用虛擬環境後,命令提示符會顯示虛擬環境的名稱。要停用虛擬環境,請在提示符中執行 deactivate 命令。執行該命令會立即離開隔離環境,並移除字首。

內容解密:

  1. source venv/bin/activate:啟用虛擬環境的命令,讓 shell 使用虛擬環境的直譯器和套件。
  2. deactivate:停用虛擬環境的命令,離開隔離環境。

套件管理與 pip

FastAPI 應用程式由套件組成,因此將介紹套件管理實踐,例如為應用程式安裝、移除和更新套件。

pip 簡介

Pip 是 Python 的套件管理器,如同 JavaScript 的 yarn。它使您能夠自動化安裝 Python 套件的過程,無論是全域還是本地。

安裝 pip

Pip 在 Python 安裝過程中自動安裝。您可以透過在終端機中執行以下命令來驗證是否安裝了 pip:

$ python3 -m pip list

上述命令應傳回已安裝的套件列表。輸出應類別似於以下圖示:

基本命令

安裝 pip 後,讓我們學習其基本命令。要使用 pip 安裝 FastAPI 套件,請執行以下命令:

$ pip install fastapi

在 Mac 或 Linux 等 Unix 作業系統上,在某些情況下,需要在安裝全域套件時新增 sudo 關鍵字。

要解除安裝套件,請使用以下命令:

$ pip uninstall fastapi

要將專案中目前安裝的套件整理到檔案中,我們使用以下 freeze 命令:

$ pip freeze > requirements.txt

運算元告訴 bash 將命令的輸出儲存到 requirements.txt 檔案中。這意味著執行 pip freeze 會傳回目前已安裝的所有套件的輸出。

要從檔案(如 requirements.txt 檔案)安裝套件,請使用以下命令:

$ pip install -r requirements.txt

上述命令主要用於佈署。

內容解密:

  1. pip install fastapi:使用 pip 安裝 FastAPI 套件的命令。
  2. pip uninstall fastapi:解除安裝 FastAPI 套件的命令。
  3. pip freeze > requirements.txt:將目前已安裝的套件整理到 requirements.txt 檔案中的命令。
  4. pip install -r requirements.txt:從 requirements.txt 檔案安裝套件的命令。