mcpField
P
python-fastapi-ops

python-fastapi-ops

github.com/0xdarkmatter开发7838 次安装2 周前更新
代码仓库

关于 python-fastapi-ops

python-fastapi-ops 是面向 FastAPI 开发者的模式参考技能,聚焦现代异步 API 的构建。内容包括请求验证、依赖注入和路由组织,并附有脚手架脚本与应用模板。

主要功能

  1. 01异步应用生命周期模式
  2. 02请求与响应模型验证
  3. 03路径和查询参数示例
  4. 04依赖注入与异常处理
  5. 05路由组织及 API 脚手架

适用场景

  1. 01搭建 FastAPI 应用
  2. 02定义并验证 API 请求
  3. 03组织路由与依赖项
  4. 04生成端点样板代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill python-fastapi-ops

安装后在 Claude Code 中输入/python-fastapi-ops确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
fastapi-template.py
references/
background-tasks.md
dependency-injection.md
middleware-patterns.md
validation-serialization.md
scripts/
scaffold-api.sh
tests/
run.sh

详细介绍

FastAPI 模式

使用 FastAPI 进行现代异步 API 开发。

基础应用

from fastapi import FastAPI
from contextlib import asynccontextmanager

@asynccontextmanager
async def lifespan(app: FastAPI):
    """Application lifespan - startup and shutdown."""
    # Startup
    app.state.db = await create_db_pool()
    yield
    # Shutdown
    await app.state.db.close()

app = FastAPI(
    title="My API",
    version="1.0.0",
    lifespan=lifespan,
)

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

请求/响应模型

from pydantic import BaseModel, Field, EmailStr
from datetime import datetime

class UserCreate(BaseModel):
    """Request model with validation."""
    name: str = Field(..., min_length=1, max_length=100)
    email: EmailStr
    age: int = Field(..., ge=0, le=150)

class UserResponse(BaseModel):
    """Response model."""
    id: int
    name: str
    email: EmailStr
    created_at: datetime

    model_config = {"from_attributes": True}  # Enable ORM mode

@app.post("/users", response_model=UserResponse, status_code=201)
async def create_user(user: UserCreate):
    db_user = await create_user_in_db(user)
    return db_user

路径和查询参数

from fastapi import Query, Path
from typing import Annotated

@app.get("/users/{user_id}")
async def get_user(
    user_id: Annotated[int, Path(..., ge=1, description="User ID")],
):
    return await fetch_user(user_id)

@app.get("/users")
async def list_users(
    skip: Annotated[int, Query(ge=0)] = 0,
    limit: Annotated[int, Query(ge=1, le=100)] = 10,
    search: str | None = None,
):
    return await fetch_users(skip=skip, limit=limit, search=search)

依赖注入

from fastapi import Depends
from typing import Annotated

async def get_db():
    """Database session dependency."""
    async with async_session() as session:
        yield session

async def get_current_user(
    token: Annotated[str, Depends(oauth2_scheme)],
    db: Annotated[AsyncSession, Depends(get_db)],
) -> User:
    """Authenticate and return current user."""
    user = await authenticate_token(db, token)
    if not user:
        raise HTTPException(status_code=401, detail="Invalid token")
    return user

# Annotated types for reuse
DB = Annotated[AsyncSession, Depends(get_db)]
CurrentUser = Annotated[User, Depends(get_current_user)]

@app.get("/me")
async def get_me(user: CurrentUser):
    return user

异常处理

from fastapi import HTTPException
from fastapi.responses import JSONResponse

# Built-in HTTP exceptions
@app.get("/items/{item_id}")
async def get_item(item_id: int):
    item = await fetch_item(item_id)
    if not item:
        raise HTTPException(status_code=404, detail="Item not found")
    return item

# Custom exception handler
class ItemNotFoundError(Exception):
    def __init__(self, item_id: int):
        self.item_id = item_id

@app.exception_handler(ItemNotFoundError)
async def item_not_found_handler(request, exc: ItemNotFoundError):
    return JSONResponse(
        status_code=404,
        content={"detail": f"Item {exc.item_id} not found"},
    )

路由组织

from fastapi import APIRouter

# users.py
router = APIRouter(prefix="/users", tags=["users"])

@router.get("/")
async def list_users():
    return []

@router.get("/{user_id}")
async def get_user(user_id: int):
    return {"id": user_id}

# main.py
from app.routers import users, items

app.include_router(users.router)
app.include_router(items.router, prefix="/api/v1")

快速参考

特性用法
路径参数@app.get("/items/{id}")
查询参数def f(q: str = None)
请求体def f(item: ItemCreate)
依赖项Depends(get_db)
身份验证Depends(get_current_user)
响应模型response_model=ItemResponse
状态码status_code=201

其他资源

  • ./references/dependency-injection.md - 高级 DI 模式、作用域、缓存
  • ./references/middleware-patterns.md - 中间件链、CORS、错误处理
  • ./references/validation-serialization.md - Pydantic v2 模式、自定义验证器
  • ./references/background-tasks.md - 后台任务、异步工作线程、调度

脚本

  • ./scripts/scaffold-api.sh - 生成 API 端点样板代码

资源文件

  • ./assets/fastapi-template.py - 可用于生产环境的 FastAPI 应用骨架

另请参阅

前置条件:

  • python-typing-ops - Pydantic 模型和类型提示
  • python-async-ops - 异步端点模式

相关技能:

  • python-database-ops - SQLAlchemy 集成
  • python-observability-ops - 日志记录、指标、追踪中间件
  • python-pytest-ops - 使用 TestClient 测试 API

评论

支持 Markdown