Skip to content

Latest commit

 

History

History
73 lines (54 loc) · 1.97 KB

File metadata and controls

73 lines (54 loc) · 1.97 KB
pcx_content_type title meta
content
FastAPI
title
FastAPI

FastAPI

The FastAPI package is supported in Python Workers.

FastAPI applications use a protocol called the Asynchronous Server Gateway Interface (ASGI). This means that FastAPI never reads from or writes to a socket itself. An ASGI application expects to be hooked up to an ASGI server, typically uvicorn. The ASGI server handles all of the raw sockets on the application’s behalf.

The Workers runtime provides an ASGI server directly to your Python Worker, which lets you use FastAPI in Python Workers.

Get Started

{{}}

Clone the cloudflare/python-workers-examples repository and run the FastAPI example:

git clone https://github.com/cloudflare/python-workers-examples
cd 03-fastapi
npx wrangler@latest dev

Example code

---
filename: index.py
---
from fastapi import FastAPI, Request
from pydantic import BaseModel

async def on_fetch(request, env):
    import asgi

    return await asgi.fetch(app, request, env)

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello, World!"}

@app.get("/env")
async def root(req: Request):
    env = req.scope["env"]
    return {"message": "Here is an example of getting an environment variable: " + env.MESSAGE}

class Item(BaseModel):
    name: str
    description: str | None = None
    price: float
    tax: float | None = None

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

@app.put("/items/{item_id}")
async def create_item(item_id: int, item: Item, q: str | None = None):
    result = {"item_id": item_id, **item.dict()}
    if q:
        result.update({"q": q})
    return result

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