跳過到頁腳內容
產品比較

FastAPI Python(如何為開發人員運作)

FastAPI 是一個現代、高效能的 Web 框架,用於使用 Python 建構 API。 它設計簡單易用,且提供自動驗證、序列化和自動互動式 API 文件等強大功能。 此外,它可與任何模板引擎一起使用,並允許您使用專案所需的任何預設模板配置。

讓我們深入了解 FastAPI 的細節、特性以及如何有效地使用它。 Later in this article, we will also look into IronPDF, a PDF generation Python package from Iron Software.

FastAPI 的關鍵特性

  1. 高效能:FastAPI 是可用的最快的 Python 框架之一,得益於其為 Web 部分採用 Starlette,數據部分採用 Pydantic,性能與 Node.js 和 Go 相當。
  2. 易用性:其設計直觀,減少閱讀文件所需的時間。 該框架利用標準的 Python 型別提示,以進行數據驗證和序列化。
  3. 自動互動式文件:FastAPI 使用 OpenAPI 和 JSON Schema 自動生成互動式的 API 文件,可在 /docs (Swagger UI) 和 /redoc (ReDoc) 存取。 對 API 的任何更新都會自動反映在文檔中。
  4. 編輯器支持:在像 VS Code 這樣的編輯器中提供優秀的代碼補全和型別檢查支持,使開發更快、更少出錯。
  5. 基於標準:它基於並完全兼容於 API 的開放標準:OpenAPI 和 JSON Schema。

安裝

您可以使用 pip 安裝 FastAPI 和 Uvicorn(ASGI 伺服器):

pip install fastapi
pip install "uvicorn[standard]"
pip install fastapi
pip install "uvicorn[standard]"
SHELL

創建您的第一個 FastAPI 應用程式

這裡有一個簡單的例子,讓您從 FastAPI 開始,並通過用戶界面展示 Python 數據:

from fastapi import FastAPI

# Create a FastAPI 'app' instance
app = FastAPI()

# Root path operation
@app.get("/")
def read_root():
    return {"Hello": "World"}

# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
from fastapi import FastAPI

# Create a FastAPI 'app' instance
app = FastAPI()

# Root path operation
@app.get("/")
def read_root():
    return {"Hello": "World"}

# Path operation for items including query parameter 'q'
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
PYTHON

要運行應用程式,請使用 Uvicorn:

uvicorn main:app --reload
uvicorn main:app --reload
SHELL

此命令將啟動一個開發伺服器並自動重新加載以進行代碼更改。 您可以在 http://127.0.0.1:8000/docs 存取互動式 API 文件。

進階功能

FastAPI 支持廣泛的進階功能,適合複雜應用程式:

  1. 依賴注入:FastAPI 提供一個強大的依賴注入系統,能夠清晰有效地管理依賴。
  2. 背景任務:您可以定義在回應返回後運行的背景任務,用於發送電子郵件或處理數據等任務。
  3. WebSockets:FastAPI 支持 WebSockets,使客戶端和伺服器之間進行實時通信。
  4. 安全性:FastAPI 包含處理安全的工具,包括 OAuth2、JWT 令牌等。
  5. 數據庫集成:FastAPI 可輕鬆與數據庫集成,使用 SQLAlchemy 或 Tortoise-ORM 等庫。

範例:構建一個 CRUD API

讓我們構建一個簡單的 CRUD(創建、讀取、更新、刪除)API 來管理項目。

  1. 定義數據模型
from pydantic import BaseModel

# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
from pydantic import BaseModel

# Define a Pydantic model for the item with default description and tax
class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None
PYTHON
  1. 創建 FastAPI 應用程式
from fastapi import FastAPI, HTTPException

# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}

# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item

# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item

# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
from fastapi import FastAPI, HTTPException

# Initialize 'app' instance and an empty 'items' dictionary
app = FastAPI()
items = {}

# Create operation: Add a new item
@app.post("/items/")
def create_item(item: Item):
    item_id = len(items) + 1
    items[item_id] = item
    return item

# Read operation: Retrieve an item by 'item_id'
@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    return items[item_id]

# Update operation: Replace an existing item
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    items[item_id] = item
    return item

# Delete operation: Remove an item by 'item_id'
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
    if item_id not in items:
        raise HTTPException(status_code=404, detail="Item not found")
    del items[item_id]
    return {"message": "Item deleted"}
PYTHON

介紹 IronPDF

快速API Python(對開發人員的工作原理):圖 1

IronPDF 是一個功能強大的 Python 庫,設計用於從 HTML、CSS、圖像和 JavaScript 創建、編輯和簽署 PDF。 它提供商業級的性能,且內存佔用率低。 主要功能包括:

HTML 到 PDF 轉換

將 HTML 檔案、HTML 字符串和網址轉換為 PDF。 例如,使用 Chrome PDF 渲染器將網頁呈現為 PDF。

跨平台支持

兼容各種 .NET 平台,包括 .NET Core、.NET Standard 和 .NET Framework。 支持 Windows、Linux 和 macOS。

編輯和簽署

設置屬性,為您的 PDF 添加密碼和權限等安全措施,以及應用數位簽名。

頁面模板和設置

使用頁首、頁尾、頁碼和可調邊距自定義 PDF。 支持響應式佈局和自定義紙張尺寸。

標準合規性

符合 PDF 標準,如 PDF/A 和 PDF/UA。 支持 UTF-8 字符編碼,並處理資產如圖像、CSS 和字體。

使用 IronPDF 和 FastAPI 生成 PDF 文件

pip install fastapi
pip install ironPDF
pip install fastapi
pip install ironPDF
SHELL
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *

# Apply your IronPDF license key
License.LicenseKey = "key"

# Initialize 'app' instance
app = FastAPI()

# Route for simple greeting
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}

# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
    # Use ChromePdfRenderer to create PDF from HTML
    renderer = ChromePdfRenderer()
    content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs</p>"
    content += f"<p>Greetings from: {greet1}</p>"
    content += f"<p>And Greetings from: {greet2}</p>"
    pdf = renderer.RenderHtmlAsPdf(content)

    # Save the PDF to a file
    pdf.SaveAs("fastapi.pdf")

    # Create a response with the generated PDF
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }
    return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
from fastapi import FastAPI
from fastapi.responses import FileResponse
from ironpdf import *

# Apply your IronPDF license key
License.LicenseKey = "key"

# Initialize 'app' instance
app = FastAPI()

# Route for simple greeting
@app.get("/")
def read_root():
    return {"Hello": "IronPDF"}

# Route that reads items with path and query parameters
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

# Route for generating a PDF document
@app.get("/pdf")
async def get_pdf(greet1: str = None, greet2: str = None):
    # Use ChromePdfRenderer to create PDF from HTML
    renderer = ChromePdfRenderer()
    content = "<h1>Document Generated using IronPDF with FastAPI GET</h1>"
    content += "<p> Demonstrate PDF generation using User Inputs</p>"
    content += f"<p>Greetings from: {greet1}</p>"
    content += f"<p>And Greetings from: {greet2}</p>"
    pdf = renderer.RenderHtmlAsPdf(content)

    # Save the PDF to a file
    pdf.SaveAs("fastapi.pdf")

    # Create a response with the generated PDF
    headers = {
        "Content-Disposition": "inline; filename=sample.pdf"
    }
    return FileResponse("fastapi.pdf", media_type="application/pdf", headers=headers)
PYTHON

代碼解釋

此代碼片段演示了 IronPDF 與 FastAPI 的集成,根據用戶輸入動態生成 PDF 文件並作為可下載的回應提供。

  1. 設置許可證密鑰:應用 IronPDF 許可證密鑰以啟用其功能。

  2. FastAPI 初始化:初始化 FastAPI 實例(app)以處理 HTTP 請求。

  3. 基本路徑處理器:

    • read_root():在存取根 URL (/) 時回應簡單的 JSON 訊息,表示 "Hello IronPDF"。
    • read_item():接受一個 item_id 路徑參數和一個可選的 q 查詢參數。 回傳具有這些參數的 JSON 回應。
  4. PDF 生成路徑 (/pdf):

    • get_pdf():此非同步函數處理對 /pdf 端點的 GET 請求,帶有名稱為 greet1greet2 的可選查詢參數。
    • 構建包含以下內容的 HTML 字符串(content):
      • 指示文件來源和目的的標題。
      • 使用用戶輸入(greet1greet2)演示 PDF 生成的段落。
    • 使用 IronPDF 的 ChromePdfRenderer() 將 HTML 內容渲染為 PDF(pdf = renderer.RenderHtmlAsPdf(content))。
    • 將生成的 PDF 保存為 "fastapi.pdf"(pdf.SaveAs("fastapi.pdf"))。
  5. 提供 PDF:
    • 配置回應頭以指定 PDF 應在瀏覽器中內嵌查看("Content-Disposition": "inline; filename=sample.pdf")。
    • 創建指向生成的 PDF 檔案的 FileResponse 對象,並帶有適當的媒體類型("application/pdf")。
    • 返回 FileResponse 對象,當存取 /pdf 端點時觸發 PDF 文件的下載。

此代碼片段說明了 IronPDF 如何與 FastAPI 無縫集成,以根據用戶輸入動態生成和提供 PDF 文件。 它展示了將 HTML 內容轉換為 PDF 的能力,適用於需要動態生成和通過 HTTP 交付文檔的應用程式。

輸出

以下顯示了從 API 生成的 swagger 輸出

快速API Python(對開發人員的工作原理):圖 2

PDF

快速API Python(對開發人員的工作原理):圖 3

IronPDF 許可證

IronPDF 在 Python 許可證密鑰上運行。 IronPDF for Python 提供免費試用許可證密鑰,以便用戶在購買前查看功能。

在使用 IronPDF 軟件包之前,將許可證密鑰放置在腳本的開頭:

from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
PYTHON

結論

FastAPI 是一個功能強大且易於使用的 Python 構建 API 的框架。 FastAPI 擁有高效能、自動生成文件和進階的特性,使其成為初學者和經驗豐富的開發者的絕佳選擇。 無論您是在構建一個簡單的 API 還是一個複雜的 Web 應用程式,FastAPI 都提供了成功所需的工具。

IronPDF 是一個強大的 Python 庫,用於從 HTML 內容創建、操作和渲染 PDF 文件。 它提供如 HTML 到 PDF 轉換、互動式表單創建、PDF 操作(合併、拆分)和文本提取等功能。 適合輕鬆生成動態 PDF 並集成到各種 Python 應用程式中。

常見問題解答

如何在 Python 應用程式中將 HTML 內容轉換為 PDF?

您可以使用 IronPDF 的 ChromePdfRenderer 將 HTML、CSS 和 JavaScript 內容轉換為 PDF 文件。這允許無縫集成到 Python 應用程式中,生成來自 Web 內容的 PDF 文檔。

使用 FastAPI 構建 API 的好處是什麼?

FastAPI 提供高性能、自動驗證、序列化和互動 API 文檔。它利用 Starlette 和 Pydantic 確保速度和效率,與 Node.js 和 Go 相當,同時支持開放標準如 OpenAPI。

如何在 FastAPI 中服務 PDF 文檔?

您可以通過使用 IronPDF 生成 PDF 文檔並使用 FastAPI 的 FileResponse 返回來在 FastAPI 中服務 PDF 文檔。這種方法允許您根據客戶請求動態創建和服務 PDF。

什麼使 FastAPI 適合實時應用程序?

FastAPI 支持 WebSockets,這使得客戶端和服務器之間的實時通信成為可能,是需要即時數據更新或實時交互的應用程序的理想選擇。

FastAPI 如何處理數據驗證和序列化?

FastAPI 使用 Pydantic 模型和標準 Python 類型提示來處理數據驗證和序列化。這確保了輸入數據正確驗證並轉換為所需格式,降低錯誤的可能性。

FastAPI 提供哪些安全功能?

FastAPI 提供強大的安全功能,包括 OAuth2、JWT 認證和依賴注入,允許開發人員以最小的努力建立安全的應用程序。

IronPDF 可以用於跨平台應用程式嗎?

是的,IronPDF 設計為跨平台,支持 Windows、Linux 和 macOS。這使它成為開發者希望將 PDF 生成功能集成到在不同操作系統上運行的應用程式中的通用選擇。

FastAPI 如何提高開發人員的生產力?

FastAPI 通過提供自動 API 文檔、代碼完成和類型檢查來提高開發人員的生產力。這減少了對廣泛手動文檔的需求,並幫助在開發過程的早期發現錯誤。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。