360 Secure SkillHub
360 安全技能中心

GI API Design FastAPI

核心功能是为tkms+FastAPI技术栈,按规范设计实现RESTful API,涵盖路由命名、HTTP方法、响应/错误处理、入参校验、分页等规则,提供代码示例。适用于用户请求设计接口、新增API、编写路由、设计请求/响应结构等场景,输入为API需求,输出符合规范的代码或设计方案。

laimiaohua
laimiaohua
热度 67.29
最近更新 2026-05-11 17:32:28
分类:开发依赖:纯提示词应用场景:代码生成 / API 集成 / 模板

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add gi-api-design-fastapi
Metadata
name
gi-api-design-fastapi
description
Design and implement RESTful API endpoints following FastAPI best practices. Use when creating new API routes, designing request/response schemas, or when the user asks for API design guidance.
tags
["fastapi","api","rest","openapi","python","backend"]

FastAPI 接口设计规范

按照项目规范设计并实现 RESTful API,适用于 tkms + FastAPI 技术栈。

何时使用

  • 用户请求「设计一个接口」「新增 API」「写个路由」
  • 设计请求/响应结构
  • 实现 app/router 下的新端点

项目结构

app/
├── router/     # 路由定义
├── service/    # 业务逻辑
├── dao/        # 数据访问
└── model/
    ├── dto/    # 入参(请求体、查询参数)
    ├── entity/ # 数据库实体
    └── vo/     # 出参(响应体)

设计原则

1. 路由命名

  • 资源用复数名词:/users、/orders
  • 嵌套资源:/users/{user_id}/orders
  • 动作用动词:/orders/{id}/cancel(POST)

2. HTTP 方法

方法 用途 示例
GET 查询 GET /users, GET /users/{id}
POST 创建 POST /users
PUT 全量更新 PUT /users/{id}
PATCH 部分更新 PATCH /users/{id}
DELETE 删除 DELETE /users/{id}

3. 统一响应格式

# 成功
{"code": 0, "message": "success", "data": {...}}

# 分页
{"code": 0, "data": {"list": [...], "total": 100}}

# 错误(由 ApiException 统一处理)
{"code": 400, "message": "参数错误"}

4. 错误处理

from tkms.exception.api import ApiException

# 业务异常
raise ApiException(code=400, message="用户不存在")

5. 入参校验

  • 使用 Pydantic 模型(dto)
  • 路径参数:user_id: int
  • 查询参数:Query(..., description="")
  • 请求体:Body(...) 或直接声明

6. 分页规范

# 入参
page: int = Query(1, ge=1)
page_size: int = Query(20, ge=1, le=100)

# 出参
{"list": [...], "total": 100}

示例模板

# router/user.py
from fastapi import APIRouter, Depends
from app.model.dto.user_dto import UserCreateDto, UserUpdateDto
from app.model.vo.user_vo import UserVo
from app.service.user_service import UserService

router = APIRouter(prefix="/users", tags=["用户"])

@router.post("", response_model=UserVo)
async def create_user(dto: UserCreateDto, service: UserService = Depends()):
    return await service.create(dto)

@router.get("/{user_id}", response_model=UserVo)
async def get_user(user_id: int, service: UserService = Depends()):
    return await service.get_by_id(user_id)

安全与权限

  • 需要登录:使用依赖注入的认证中间件
  • 敏感操作:校验权限/角色
  • 限流:按需配置