FastAPI-CRUDRouter 路由配置完全指南

FastAPI-CRUDRouter 路由配置完全指南

FastAPI-CRUDRouter 是一个强大的工具,能够自动为你的模型生成完整的CRUD路由。本文将深入解析其路由生成机制,帮助你掌握路由定制技巧。

默认路由生成机制

FastAPI-CRUDRouter 默认会为每个模型生成6个标准RESTful路由:

| 路由路径 | HTTP方法 | 功能描述 | |----------------|----------|--------------------------| | / | GET | 获取所有资源 | | / | POST | 创建新资源 | | / | DELETE | 删除所有资源 | | /{item_id} | GET | 获取指定ID的资源 | | /{item_id} | PUT | 更新指定ID的资源 | | /{item_id} | DELETE | 删除指定ID的资源 |

这些路由路径会自动添加前缀,前缀值取决于你使用的CRUDRouter类型和模型定义。

路由前缀配置技巧

路由前缀是自动生成的,但你可以完全控制它:

  1. 自动前缀生成规则

    • MemoryCRUDRouter:使用Pydantic模型的类名作为前缀(小写形式)
    • SQLAlchemyCRUDRouter:使用数据库表名作为前缀
  2. 自定义前缀 你可以通过prefix参数显式指定前缀:

    router = CRUDRouter(model=MyModel, prefix='custom-prefix')
    

路由禁用与启用

FastAPI-CRUDRouter 提供了精细的路由控制能力,你可以选择性地禁用不需要的路由:

| 参数名 | 默认值 | 功能说明 | |-------------------|--------|----------------------------| | get_all_route | True | 是否生成获取所有资源的路由 | | get_one_route | True | 是否生成获取单个资源的路由 | | delete_all_route | True | 是否生成删除所有资源的路由 | | delete_one_route | True | 是否生成删除单个资源的路由 | | create_route | True | 是否生成创建资源的路由 | | update_route | True | 是否生成更新资源的路由 |

使用示例:

router = MemoryCRUDRouter(
    schema=MyModel,
    delete_all_route=False,  # 禁用删除所有资源的路由
    create_route=True       # 显式启用创建资源的路由
)

高级路由定制

当默认生成的路由不能满足需求时,你可以完全覆盖它们:

1. 路由覆盖方法

FastAPI-CRUDRouter 继承自FastAPI的APIRouter,因此支持所有标准路由装饰器:

  • @router.get()
  • @router.post()
  • @router.put()
  • @router.delete()
  • @router.api_route()

2. 路由覆盖示例

下面是一个覆盖默认路由的完整示例:

from pydantic import BaseModel
from fastapi import FastAPI
from fastapi_crudrouter import MemoryCRUDRouter as CRUDRouter

class Product(BaseModel):
    id: int
    name: str
    price: float

app = FastAPI()
router = CRUDRouter(schema=Product)

# 覆盖获取所有产品的路由
@router.get('')
async def custom_get_all():
    return {"message": "这是自定义的获取所有产品路由"}

# 覆盖获取单个产品的路由
@router.get('/{item_id}')
async def custom_get_one(item_id: int):
    return {"message": f"这是自定义的获取ID为{item_id}的产品路由"}

app.include_router(router)

3. 路由覆盖最佳实践

  • 保持路由路径与默认生成的路由一致,确保API一致性
  • 在覆盖路由时,考虑保留原有的核心功能
  • 可以通过调用super()方法复用原有逻辑

实际应用建议

  1. 微服务架构:在微服务中,可以禁用不需要的路由,保持API最小化
  2. 权限控制:通过路由覆盖添加自定义权限验证逻辑
  3. 数据过滤:在获取路由中添加额外的查询参数支持
  4. 响应定制:修改默认响应格式,添加业务特定的元数据

FastAPI-CRUDRouter 的路由系统既提供了开箱即用的便利性,又保留了充分的灵活性,是构建RESTful API的高效工具。通过合理配置路由,你可以快速搭建出既规范又可定制的API接口。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶真蔷Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值