6.Methods.md

last update: 2025-06-07

FastAPI 提供多種方式與前端、外部 API、資料庫及第三方服務建立連線。以下為常見的連線情境與實作方式:


1. 前端表單與瀏覽器請求(HTML Form / AJAX)

(1) 使用表單傳送 POST 請求:

<form method="post" action="/submit">
  <input type="text" name="data">
  <button type="submit">送出</button>
</form>
from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/submit")
def submit(data: str = Form(...)):
    return {"data": data}

(2) 使用 Fetch 發送 JSON:

fetch("/api", {
  method: "POST",
  headers: {"Content-Type": "application/json"},
  body: JSON.stringify({ key: "value" })
});
from pydantic import BaseModel

class Payload(BaseModel):
    key: str

@app.post("/api")
def receive(payload: Payload):
    return payload

2. 前端 GET 請求(URL/查詢字串)

<a href="/search?q=fastapi">搜尋</a>
@app.get("/search")
def search(q: str):
    return {"query": q}

3. 與資料庫連線(SQLAlchemy)

pip install sqlalchemy databases asyncpg
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

SQLALCHEMY_DATABASE_URL = "postgresql+asyncpg://user:pass@localhost/dbname"
engine = create_engine(SQLALCHEMY_DATABASE_URL, echo=True)
SessionLocal = sessionmaker(bind=engine)

4. 呼叫外部 API(requests / httpx)

pip install httpx
import httpx

@app.get("/external")
def external():
    response = httpx.get("https://api.example.com/data")
    return response.json()

5. WebSocket 連線(即時通訊)

from fastapi import WebSocket

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    data = await websocket.receive_text()
    await websocket.send_text(f"收到: {data}")

小結

類型
技術 / 套件
說明

表單 / HTML

Form, HTMLResponse

接收瀏覽器提交的表單資料

JSON API

pydantic.BaseModel

JSON 請求體驗證與解析

查詢 / 路由參數

Query, Path

處理 URL 上的 GET 請求

資料庫連線

SQLAlchemy, databases

持久化資料儲存

外部 API 呼叫

httpx, requests

呼叫第三方 Web API

WebSocket

WebSocket

即時雙向通訊

掌握這些連線方式後,能讓 FastAPI 與內外部系統有效整合,從簡單表單到 WebSocket 即時資料交換都可涵蓋。

Last updated