API 接口命名规范

本文涉及的产品
RDS AI 助手,专业版
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
PolarDB Agent Express,2核4GB
简介: 本规范定义FastAPI接口命名与开发标准:URL用kebab-case复数路径;HTTP方法严格语义化;字段用snake_case,布尔值加is_/has_前缀;特殊操作走POST+动作名;版本置于URL;错误码分模块管理;代码层统一DTO、响应结构及异常处理。(239字)

一、核心命名基础规则

这是所有接口必须遵循的底层约定,统一路径、方法、字段的基础标准,保证接口具备自解释能力。

URL 路径规范

资源统一用名词复数表示集合,单体资源拼接 /{id},如 /users、/users/123,禁止动词开头、单复数混用

多单词采用 kebab-case(短横线分隔)全小写格式,如 /user-orders

从属关系通过路径嵌套体现,层级不超过 3 级,如 /orders/{order_id}/items

全局统一前缀格式:/api/版本号/业务资源

HTTP 方法语义 严格用 HTTP 方法对应业务动作,禁止全接口用 POST、用 GET 执行写操作:

GET:查询资源

POST:新增资源

PUT:全量更新资源

PATCH:部分更新资源

DELETE:删除资源

参数字段规范

查询参数、请求 / 响应字段统一采用 snake_case 风格,与 Python 原生编码习惯一致

布尔字段统一加 is/has 前缀,列表响应固定为 list + total 结构

禁用拼音、无意义自造缩写、中英文混合命名

二、场景化与兼容规范

针对非标准 CRUD 业务、接口迭代、异常响应等场景补充约定,覆盖全业务场景的命名一致性。

特殊动作接口:对资源执行特定状态操作时,采用 POST /资源/{id}/动作名 格式,如 POST /users/123/disable、POST /orders/123/pay

批量操作:在集合资源下新增 batch-xxx 路径,如 POST /users/batch-delete

版本控制:采用 URL 路径大版本方案,如 /api/v1/users、/api/v2/users,小功能迭代不升级版本号

错误响应规范:HTTP 状态码精准对应错误类型;业务错误码按模块分段管理(通用 1xxxx、用户 2xxxx、订单 3xxxx),错误信息语义明确,禁止模糊提示

三、Python FastAPI 落地代码

接口路由定义

from fastapi import APIRouter, Query, Depends, HTTPException
from pydantic import BaseModel, Field
from typing import Optional, List, Any

# ==================== 1. 统一返回结构 & DTO 定义 ====================

class Result(BaseModel):
    """统一响应结构"""
    code: int = 200
    message: str = "success"
    data: Optional[Any] = None

class PageResult(BaseModel):
    """分页响应结构"""
    list: List[Any] = []
    total: int = 0

class UserCreateDTO(BaseModel):
    """创建用户入参"""
    username: str = Field(..., min_length=3, max_length=20, description="用户名")
    email: str = Field(..., description="用户邮箱")
    password: str = Field(..., min_length=6, description="密码")

class UserUpdateDTO(BaseModel):
    """更新用户入参"""
    username: Optional[str] = None
    email: Optional[str] = None

class BatchDeleteDTO(BaseModel):
    """批量删除入参"""
    user_ids: List[int] = Field(..., description="待删除的用户ID列表")


# ==================== 2. 模拟 Service  (实际项目中应抽离到独立文件) ====================

class UserService:
    @staticmethod
    def list_users(page_num: int, page_size: int, keyword: Optional[str]):
        # TODO: 接入真实数据库查询逻辑
        return PageResult(list=[], total=0)

    @staticmethod
    def get_user_by_id(user_id: int):
        # TODO: 查询数据库,找不到时抛出异常
        return {
   "id": user_id, "username": "test"}

    @staticmethod
    def create_user(dto: UserCreateDTO):
        # TODO: 数据库插入逻辑
        pass

    @staticmethod
    def update_user(user_id: int, dto: UserUpdateDTO):
        # TODO: 数据库更新逻辑
        pass

    @staticmethod
    def delete_user(user_id: int):
        # TODO: 数据库删除逻辑
        pass

    @staticmethod
    def disable_user(user_id: int):
        # TODO: 状态变更逻辑
        pass

    @staticmethod
    def batch_delete_users(dto: BatchDeleteDTO):
        # TODO: 批量删除逻辑
        pass


# ==================== 3. 依赖注入 (鉴权示例) ====================

def get_current_user():
    """模拟获取当前登录用户的依赖注入"""
    # TODO: 解析 Token,校验权限
    return {
   "id": 1, "role": "admin"}


# ==================== 4. Router 控制器层 ====================

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

@router.get("", summary="查询用户列表")
def list_users(
    page_num: int = Query(1, ge=1, description="页码"),
    page_size: int = Query(10, ge=1, le=100, description="每页条数"),
    keyword: Optional[str] = Query(None, description="搜索关键词")
):
    data = UserService.list_users(page_num, page_size, keyword)
    return Result(data=data)

@router.get("/{user_id}", summary="查询单个用户")
def get_user(user_id: int):
    user = UserService.get_user_by_id(user_id)
    if not user:
        raise HTTPException(status_code=404, detail=f"用户 {user_id} 不存在")
    return Result(data=user)

@router.post("", summary="新增用户")
def create_user(body: UserCreateDTO, current_user=Depends(get_current_user)):
    UserService.create_user(body)
    return Result(message="创建成功")

@router.put("/{user_id}", summary="全量更新用户")
def update_user(user_id: int, body: UserUpdateDTO, current_user=Depends(get_current_user)):
    UserService.update_user(user_id, body)
    return Result(message="更新成功")

@router.delete("/{user_id}", summary="删除用户")
def delete_user(user_id: int, current_user=Depends(get_current_user)):
    UserService.delete_user(user_id)
    return Result(message="删除成功")

@router.post("/{user_id}/disable", summary="禁用用户")
def disable_user(user_id: int, current_user=Depends(get_current_user)):
    UserService.disable_user(user_id)
    return Result(message="禁用成功")

@router.post("/batch-delete", summary="批量删除用户")
def batch_delete_users(body: BatchDeleteDTO, current_user=Depends(get_current_user)):
    UserService.batch_delete_users(body)
    return Result(message="批量删除成功")

数据模型定义

from pydantic import BaseModel, Field
from typing import Generic, TypeVar, List, Optional

T = TypeVar("T")


class UserCreateDTO(BaseModel):
    username: str = Field(..., min_length=3, max_length=20)
    phone: str = Field(..., pattern=r"^1[3-9]\d{9}$")
    email: str = Field(..., description="用户邮箱")
    dept_id: int = Field(..., gt=0)
    is_enabled: bool = True


class UserUpdateDTO(BaseModel):
    username: Optional[str] = Field(None, min_length=3, max_length=20)
    phone: Optional[str] = Field(None, pattern=r"^1[3-9]\d{9}$")
    email: Optional[str] = None
    dept_id: Optional[int] = Field(None, gt=0)
    is_enabled: Optional[bool] = None


class BatchDeleteDTO(BaseModel):
    ids: List[int] = Field(..., min_length=1, description="待删除的用户ID列表")


class PageResult(BaseModel, Generic[T]):
    list: List[T] = []
    total: int = 0


class Result(BaseModel, Generic[T]):
    code: int = 200
    message: str = "success"
    data: Optional[T] = None

错误码枚举

from enum import IntEnum


class ErrorCode(IntEnum):
    PARAM_INVALID = 10001
    UNAUTHORIZED = 10002
    USER_NOT_EXIST = 20001
    USER_ALREADY_EXIST = 20002
    ORDER_NOT_EXIST = 30001


ERROR_MESSAGES: dict[ErrorCode, str] = {
   
    ErrorCode.PARAM_INVALID: "参数不合法",
    ErrorCode.UNAUTHORIZED: "未授权访问",
    ErrorCode.USER_NOT_EXIST: "用户不存在",
    ErrorCode.USER_ALREADY_EXIST: "用户名已存在",
    ErrorCode.ORDER_NOT_EXIST: "订单不存在",
}
目录
相关文章
|
4天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
8516 37
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
3天前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
|
4天前
|
JavaScript 定位技术 API
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
CodeGraph 是一款爆火的本地代码智能工具,通过 tree-sitter 解析 AST 构建结构化知识图谱(存于 SQLite),为编程 Agent 提前生成“代码地图”。它显著降低 Agent 在中大型项目中的探索成本——实测工具调用减少71%、Token 降57%、速度提升46%,支持19+语言及主流框架路由识别,完全离线、无需 API Key。
617 3
CodeGraph 爆火:编程 Agent 需要的不是更多上下文,而是一张提前画好的代码地图
|
4天前
|
人工智能 运维 JavaScript
阿里云Qoder CN(原通义灵码)全解析 产品形态、版本划分与技术适配说明
在AI辅助开发与智能办公工具持续普及的当下,阿里云旗下原通义灵码正式更名为Qoder CN,同时延伸出QoderWork CN、Qoder CN CLI、Qoder CN Mobile等多款配套产品,形成覆盖代码开发、日常办公、终端交互、移动端使用的完整工具矩阵。Qoder CN核心定位为AI智能编码助手,深度适配主流代码编辑器、集成开发环境以及终端场景;QoderWork CN则偏向桌面端综合办公辅助,二者面向不同使用场景,划分了多个版本档位,搭配差异化资源配额、功能权限与计费规则,同时兼容多款主流大模型。
620 4
|
4天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
709 148
|
4天前
|
人工智能 缓存 自然语言处理
阿里Qwen3.7-Max评测:Agent能力显著提升,耗时与调用成本大幅下降
阿里云百炼推出面向智能体的旗舰大模型Qwen3.7-Max,具备长周期自主执行能力,显著提升编程、办公自动化等复杂任务处理水平;支持MCP集成与多框架兼容,并以限时5折+100万Tokens免费试用大幅降低使用门槛,助力企业高效落地AI应用。在阿里云百炼平台快速体验:https://t.aliyun.com/U/fPVHqY
1949 10
|
4天前
|
存储 安全 Java
AgentScope Java 2.0:打造分布式、企业级智能体底座
AgentScope 2.0 面向分布式部署、稳定运行、权限安全等企业级需求全面升级,打造支持多租户隔离与长期稳定运行的企业级智能体底座。
|
4天前
|
人工智能 运维 API
2026年阿里云百炼通义千问Qwen3.7-plus深度介绍 功能特性、使用优势及618大促订阅方案指南
大模型技术的普及,让AI能力逐步融入个人办公、内容创作、代码编写、企业运营、教育培训等各类场景。不同定位的模型对应不同使用需求,旗舰级模型性能强劲但使用成本偏高,轻量化模型价格低廉却难以胜任复杂任务,而介于两者之间的中端主力模型,凭借均衡的能力、亲民的定价、广泛的场景适配性,成为绝大多数个人用户、小型团队、中小企业的首选。
742 1
|
4天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1347 2
|
4天前
|
人工智能 运维 自然语言处理
阿里云百炼Qwen3.7-Max模型详解:综合能力、核心优势与订阅计划参考指南
2026年,大模型技术持续向通用化、高性能、场景化方向迭代,阿里云百炼作为一站式大模型服务平台,持续推出迭代升级的模型产品,Qwen3.7-Max便是当前主力旗舰级大模型之一。该模型依托深度优化的底层架构与大规模训练数据,在文本理解、逻辑推理、多模态交互、代码生成、长文本处理等多个维度实现能力升级,同时搭配灵活的订阅计划体系,能够适配个人开发者、中小企业、大型企业、政企机构等不同类型用户的使用需求。
545 2