根据Google API设计指南整理的RESTful API示例,涵盖核心HTTP方法(GET、POST、PUT、PATCH、DELETE)及父子资源嵌套场景, 设计遵循以下原则:
资源命名:使用名词复数形式(如/users
),URI层级表达父子关系(如/users/{userId}/orders
)
HTTP方法语义:
GET
:查询资源
POST
:创建资源
PUT
:全量更新
PATCH
:部分更新
DELETE
:删除资源
无状态性:每个请求包含完整上下文
版本控制:URL中嵌入版本号(如/v1/
)
Google API设计指南的核心技术要点整理,结合其官方规范及实践总结:
? 一、设计原则
面向资源设计 (Resource-Oriented Design)
标准方法优先
一、用户管理(10个)
GET /v1/users
? 分页查询用户列表(参数:?page=2&limit=50
)
POST /v1/users
? 创建新用户(Body包含用户JSON)
GET /v1/users/{userId}
? 获取指定ID的用户详情
PUT /v1/users/{userId}
? 全量更新用户信息
PATCH /v1/users/{userId}
? 部分更新用户(如仅修改邮箱)
DELETE /v1/users/{userId}
? 删除用户
GET /v1/users/{userId}/permissions
? 获取用户的权限列表(父子资源)
POST /v1/users/{userId}/avatar
? 为用户上传头像(子资源)
DELETE /v1/users/{userId}/sessions
? 终止用户所有活跃会话
GET /v1/users/{userId}/roles/{roleId}
? 查询用户绑定的特定角色详情
二、产品目录(15个)
GET /v1/products
? 过滤产品(?category=electronics&price<=1000
)
POST /v1/products
? 创建新产品
GET /v1/products/{productId}
? 查询产品详情
PUT /v1/products/{productId}
? 全量更新产品信息
PATCH /v1/products/{productId}/stock
? 更新产品库存(部分更新)
DELETE /v1/products/{productId}
? 下架产品
GET /v1/products/{productId}/reviews
? 获取产品评价列表(父子)
POST /v1/products/{productId}/reviews
? 为产品添加评价
DELETE /v1/products/{productId}/reviews/{reviewId}
? 删除指定评价
GET /v1/products/{productId}/versions
? 查询产品历史版本(子资源)
POST /v1/products/{productId}/attachments
? 上传产品附件(如说明书)
GET /v1/categories/{categoryId}/products
? 按分类查询产品(父子)
PATCH /v1/products/{productId}/pricing
? 仅更新产品价格
POST /v1/products/batch-delete
? 批量删除产品(Body含ID列表)
GET /v1/brands/{brandId}/products
? 按品牌查询产品
三、订单系统(20个)
POST /v1/users/{userId}/orders
? 为用户创建订单(父子)
GET /v1/users/{userId}/orders/{orderId}
? 查询用户特定订单
DELETE /v1/users/{userId}/orders/{orderId}
? 取消订单
GET /v1/orders?status=shipped
? 全局过滤订单(独立资源)
PATCH /v1/orders/{orderId}/status
? 更新订单状态(如shipped
)
POST /v1/orders/{orderId}/items
? 向订单中添加商品项
DELETE /v1/orders/{orderId}/items/{itemId}
? 从订单移除商品项
GET /v1/orders/{orderId}/invoice
? 下载订单发票
POST /v1/orders/{orderId}/refunds
? 发起退款请求
PUT /v1/orders/{orderId}/shipping-address
? 更新配送地址
GET /v1/users/{userId}/orders/history
? 查询用户历史订单
POST /v1/orders/batch-create
? 批量创建订单(企业场景)
PATCH /v1/orders/{orderId}/priority
? 调整订单优先级
GET /v1/warehouses/{warehouseId}/orders
? 查询仓库关联订单
POST /v1/orders/{orderId}/notifications
? 发送订单通知(如短信)
DELETE /v1/orders/{orderId}/attachments/{fileId}
? 删除订单附件
GET /v1/orders/{orderId}/timeline
? 获取订单状态时间线
PUT /v1/orders/{orderId}/coupon
? 应用优惠券到订单
POST /v1/orders/{orderId}/split
? 拆分订单(如分仓库发货)
GET /v1/orders/stats?period=monthly
? 获取订单统计报表
四、博客系统(15个)
POST /v1/blogs
? 创建博客文章
GET /v1/blogs/{blogId}/comments
? 获取文章评论(父子)
POST /v1/blogs/{blogId}/comments
? 新增评论
DELETE /v1/blogs/{blogId}/comments/{commentId}
? 删除评论
PATCH /v1/blogs/{blogId}/likes
? 更新文章点赞数
GET /v1/users/{userId}/blogs
? 查询用户所有文章
PUT /v1/blogs/{blogId}/content
? 全量更新文章内容
POST /v1/blogs/{blogId}/tags
? 为文章添加标签
DELETE /v1/blogs/{blogId}/tags/{tagId}
? 移除文章标签
GET /v1/tags/{tagName}/blogs
? 按标签查询文章
POST /v1/blogs/{blogId}/publish
? 发布草稿(特殊动作)
GET /v1/blogs/{blogId}/versions/{versionId}
? 获取文章历史版本
POST /v1/blogs/{blogId}/attachments
? 上传文章附件(如图片)
DELETE /v1/blogs/{blogId}/subscripqions
? 取消文章订阅
GET /v1/blogs/trending?top=10
? 获取热门文章排行
五、文件存储(15个)
POST /v1/files
? 上传文件(返回文件ID)
GET /v1/files/{fileId}
? 下载文件
DELETE /v1/files/{fileId}
? 删除文件
GET /v1/folders/{folderId}/files
? 列出文件夹内文件(父子)
POST /v1/folders/{folderId}/files
? 向文件夹上传文件
PATCH /v1/files/{fileId}/permissions
? 修改文件权限(部分更新)
PUT /v1/files/{fileId}/metadata
? 更新文件元数据(如作者)
GET /v1/files/{fileId}/history
? 获取文件版本历史
POST /v1/files/{fileId}/restore?version=2
? 恢复文件到指定版本
DELETE /v1/folders/{folderId}
? 删除文件夹(递归删除子项)
PATCH /v1/shared-links/{linkId}
? 更新文件分享链接设置
GET /v1/users/{userId}/trash/files
? 查询用户回收站文件
POST /v1/files/{fileId}/move
? 移动文件到新路径
GET /v1/files/search?name=report.docx
? 全局文件搜索
POST /v1/files/zip
? 批量打包下载文件(Body含ID列表)
六、组织架构(25个)
POST /v1/companies
? 创建公司
GET /v1/companies/{companyId}/departments
? 查询公司部门列表(父子)4
POST /v1/companies/{companyId}/departments
? 新增部门
GET /v1/departments/{deptId}/employees
? 获取部门员工
POST /v1/departments/{deptId}/employees
? 向部门添加员工
DELETE /v1/departments/{deptId}/employees/{empId}
? 从部门移除员工
PUT /v1/employees/{empId}/manager
? 更新员工直属经理
GET /v1/companies/{companyId}/projects
? 查询公司项目
POST /v1/projects/{projectId}/teams
? 为项目分配团队
DELETE /v1/companies/{companyId}/departments/{deptId}
? 删除部门(需处理员工转移)
PATCH /v1/employees/{empId}/status
? 更新员工状态(如在职/离职)
GET /v1/teams/{teamId}/members
? 获取团队成员
POST /v1/teams/{teamId}/tasks
? 为团队创建任务
GET /v1/employees/{empId}/reports
? 获取员工下属(汇报线)
PUT /v1/projects/{projectId}/budget
? 更新项目预算
POST /v1/companies/{companyId}/locetions
? 添加办公地点
DELETE /v1/companies/{companyId}/locetions/{locId}
? 移除办公地点
GET /v1/employees/{empId}/attendance?month=2025-03
? 查询员工考勤记录
POST /v1/employees/batch-update
? 批量更新员工信息(如调薪)
PATCH /v1/tasks/{taskId}/progress
? 更新任务进度百分比
GET /v1/companies/{companyId}/analytics/salaries
? 获取公司薪资分析报表
POST /v1/teams/{teamId}/meetings
? 安排团队会议
DELETE /v1/tasks/{taskId}/assignments/{empId}
? 解除员工的任务分配
PUT /v1/companies/{companyId}/policies/{policyId}
? 更新公司政策文档
GET /v1/companies/{companyId}/hierarchy
? 获取组织架构树(嵌套父子结构)
设计要点总结
父子资源嵌套原则:
HTTP方法选择:
批量操作:
错误处理:
扩展性:
自定义方法
自定义方法应谨慎使用,优先考虑标准方法,仅在标准语义无法满足时采用此模式。
根据 Google API 设计指南,当操作无法映射到标准 CRUD(Create、Read、Update、Delete)方法时,应使用自定义方法(Custom Methods)。这些方法通过 POST
请求实现,并在资源 URI 后附加 :{action}
表示非标准操作。
在Google API设计规范中,自定义方法使用 :{action}
而非 /{action}
的URI格式(如 :batchDelete
而非 /batchDelete
),这是经过严谨设计的语法规则,核心原因如下:
设计原则:区分资源 vs 操作
/{action}
的歧义性
若使用 /batchDelete
格式,会被解析为子资源路径(如存在名为 batchDelete
的资源),而非操作指令。
错误示例:
bash体验AI代码助手代码解读复制代码POST /v1/users/batchDelete
:{action}
的明确性
冒号语法显式声明这是一个动作(动词),而非资源(名词)。
正确示例:
bash体验AI代码助手代码解读复制代码POST /v1/users:batchDelete
二、语法规范:避免与子资源冲突
场景 | 路径格式 | 含义 |
---|
子资源 | /users/{userId}/photos | 查询用户相册(资源实体) |
自定义方法 | /users:search | 执行搜索(操作指令) |
若使用 /users/search
:
特殊案例:为什么 /search
被允许?
Google规范中 /search
是唯一例外,因其被定义为标准方法而非自定义方法:
bash体验AI代码助手代码解读复制代码GET /v1/users/search?query=john
四、关键结论:何时用 :
vs /
操作类型 | 示例 | URI 格式 |
---|
自定义方法(非标准操作) | 批量删除、发布、恢复 | POST /res:action |
标准查询(过滤/搜索) | 搜索、复合条件列表 | GET /res/search |
子资源操作 | 获取用户的订单 | GET /users/{id}/orders |
以下是符合规范的 20 个典型示例,覆盖不同业务场景:
?? 一、计算与处理类操作
batchDelete
calculate
generateReport
restore
translate
? 二、状态与流程管理
publish
approve
cancel
disable
resetPassword
? 三、批量与聚合操作
import
export
sync
?? 四、资源生命周期扩展
undelete
archive
validate
? 五、关联资源操作
attach
clone
move
merge
以上示例完全遵循Google API设计规范,强调URI可读性、HTTP方法语义化及资源分层管理。完整规范可参考: