Skip to content
>_devvkit
$devvkit learn --librarie fastapi-guide

FastAPI Guide

[python][api][async]
Python
Install
pip install fastapi uvicorn

FastAPI uses Python type hints for validation (Pydantic), serialization, and OpenAPI generation.

Async-first but works with sync code. Uvicorn rivals Node.js performance.

Auto-generated Swagger UI at /docs and ReDoc at /redoc — every endpoint documented.

Setup

Basic appMinimal app.
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def root():
    return {'Hello': 'World'}
# uvicorn main:app --reload

Path Operations

Path paramURL variable.
@app.get('/users/{user_id}')
def get_user(user_id: int):
    return {'user_id': user_id}
Query paramsQuery string.
@app.get('/search')
def search(q: str = '', limit: int = 10):
    return {'query': q, 'limit': limit}

Request Validation

Request bodyPydantic validation.
from pydantic import BaseModel
class UserCreate(BaseModel):
    name: str
    email: str
    age: int | None = None

@app.post('/users')
def create_user(user: UserCreate):
    return {'id': 1, **user.model_dump()}

Response Models

Response modelTyped response.
@app.get('/users', response_model=list[UserResponse])
def list_users():
    return db.get_users()  # auto-serialized

Dependencies

Dependency injectionAuth dependency.
from fastapi import Depends, HTTPException
async def get_current_user(token: str = Depends(HTTPBearer())):
    user = verify_token(token)
    if not user: raise HTTPException(status_code=401)
    return user

@app.get('/profile')
def profile(user: User = Depends(get_current_user)):
    return user

Testing

TestClientIntegration test.
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_root():
    resp = client.get('/')
    assert resp.status_code == 200
    assert resp.json() == {'Hello': 'World'}