fastapi-explicit-openapi-contract
Visible FastAPI operations pin locally reviewable metadata and avoid statically provable OpenAPI gaps.
Why
FastAPI can infer valid schemas and default statuses. This stricter organizational policy pins locally reviewable metadata while also detecting response, status, and routing mismatches that inference cannot fix.
Fix
Follow the diagnostic family: pin operation metadata, annotate parameter locations, preserve concrete schemas, document escaping alternate statuses, or correct a statically proven route conflict.
Examples
from fastapi import APIRouter
router = APIRouter()
@router.get("/users")async def users() -> list[UserResponse]: return []from fastapi import APIRouter
router = APIRouter()
@router.get("/users", status_code=200)async def read_users() -> list[UserResponse]: return []from fastapi import APIRouter
router = APIRouter()
@router.get("/health", status_code=200)async def health(): return {"status": "ok"}from fastapi import APIRouterfrom pydantic import BaseModel
class HealthResponse(BaseModel): status: str
router = APIRouter()
@router.get("/health", status_code=200)async def health() -> HealthResponse: return HealthResponse(status="ok")from fastapi import APIRouter
router = APIRouter()
@router.get("/users", status_code=200)async def read_users() -> dict: return {}from fastapi import APIRouter
router = APIRouter()
@router.get("/users", status_code=200)async def read_users() -> list[UserResponse]: return []Formerly: fastapi-openapi-contract