← Cloudflare Workers / workers / languages / python / packages
FastAPI
Balíček FastAPI je podporován v Python Workers.
Aplikace FastAPI používají protokol nazvaný Asynchronous Server Gateway Interface (ASGI) ↗. Znamená to, že FastAPI samo nikdy nečte ze socketu ani do něj nezapisuje. Aplikace ASGI očekává napojení na ASGI server, typicky uvicorn ↗. O všechny raw sockety se jménem aplikace stará ASGI server.
Python Workers poskytují ASGI server ↗ který můžete použít přímo ve svém Python Workeru a který vám umožní používat FastAPI v Python Workers.
Rychlý start
Chcete-li začít s FastAPI v Python Workers, postupujte podle těchto kroků:
- Vytvořte
src/main.pysoubor s vaší aplikací FastAPI:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
from workers import asgi
Default = asgi.entrypoint(app)- Vytvořte
wrangler.jsoncsoubor pro konfiguraci Workeru:
{
"name": "my-fastapi-app",
"main": "src/main.py",
// Set this to today's date
"compatibility_date": "2026-08-28",
"compatibility_flags": ["python_workers"],
}name = "my-fastapi-app"
main = "src/main.py"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "python_workers" ]- Vytvořte
pyproject.tomlsoubor pro správu závislostí:
[project]
name = "my-fastapi-app"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = [
"fastapi",
]
[dependency-groups]
dev = [
"workers-py",
"workers-runtime-sdk"
]- Spusťte svůj Worker lokálně:
uv run pywrangler devPoskytování frontendu
Jednostránkovou aplikaci (SPA) nebo jakýkoli statický frontend můžete vedle svého FastAPI backendu obsluhovat pomocí Workers Static Assets.
Toto odpovídá nativnímu FastAPI app.frontend() ↗ metoda, která obsluhuje statický build adresář jako trasy s nízkou prioritou, aby se nejprve zkontrolovaly operace API cest. Rozdíl je v tom, kde se soubory nacházejí: app.frontend() čte soubory z místního souborového systému, zatímco ve Workers jsou statická aktiva poskytována z globálně distribuovaného úložiště aktiv Cloudflare prostřednictvím ASSETS binding. To znamená, že vaše frontendové soubory nejsou zabalené uvnitř samotného Workeru, což udržuje balíček malý.
Umístěte výstup sestavení frontendu (například soubory HTML, CSS a JavaScript) do adresáře, jako je ./public/. Poté ve svém Wrangler souboru nastavte assets blok, který obsahuje binding a nastaví run_worker_first na true. Tím je zajištěno, že každý požadavek nejprve dorazí k vašemu FastAPI Workeru, takže vaše API routy mají přednost před statickými soubory.
Na konec aplikace FastAPI přidejte catch-all trasu, která bude nespárované požadavky proxovat na assets binding:
{
"name": "my-fastapi-app",
"main": "src/worker.py",
// Set this to today's date
"compatibility_date": "2026-08-28",
"compatibility_flags": ["python_workers"],
"assets": {
"directory": "./public/",
"binding": "ASSETS",
"run_worker_first": true
}
}name = "my-fastapi-app"
main = "src/worker.py"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "python_workers" ]
[assets]
directory = "./public/"
binding = "ASSETS"
run_worker_first = trueNezapomeňte vytvořit pyproject.toml soubor pro správu závislostí:
[project]
name = "my-fastapi-app"
version = "0.1.0"
requires-python = ">=3.13"
dependencies = [
"fastapi",
]
[dependency-groups]
dev = [
"workers-py",
"workers-runtime-sdk"
]Poté napište svůj worker:
from fastapi import FastAPI, Request
from fastapi.responses import Response
from workers import asgi
app = FastAPI()
Default = asgi.entrypoint(app)
@app.get("/api/hello")
async def api_hello():
return {"message": "Hello from the API"}
# Catch-all: proxy everything else to Workers Static Assets.
# This is the Workers equivalent of app.frontend("/", directory="dist").
@app.get("/{path:path}")
async def frontend(path: str, request: Request):
env = request.scope["env"]
asset_url = f"https://assets.local/{path}"
resp = await env.ASSETS.fetch(asset_url)
body = await resp.bytes()
headers = dict(resp.headers)
return Response(content=body, status_code=resp.status, headers=headers)Tento worker můžete spustit lokálně pomocí uv run pywrangler dev.
Při tomto nastavení požadavek na /api/hello zpracovává FastAPI, zatímco požadavek na /index.html nebo jakákoli jiná cesta se obsluhuje z ./public/ adresář prostřednictvím assets binding.
Více informací o konfiguraci statických prostředků najdete v Dokumentace Workers Static Assets.
Další příklady
Naklonujte cloudflare/python-workers-examples repozitář a spusťte v něm příklady FastAPI:
git clone https://github.com/cloudflare/python-workers-examples
cd python-workers-examples/fastapi
uv run pywrangler dev