根据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)
- API 的核心抽象是资源 (名词),通过标准方法 (动词)操作。资源以层次结构组织(如 
users/{id}/messages/{id}),资源名称需为原子性字符串39。 - 资源集合命名:复数小写驼峰式 (如 
shelves),避免泛用词(如items) 
 - API 的核心抽象是资源 (名词),通过标准方法 (动词)操作。资源以层次结构组织(如 
 - 
标准方法优先
- 
五大标准方法覆盖 70%+ 场景,确保一致性7:
方法 HTTP 映射 功能 ListGET分页查询资源集合 GetGET获取单个资源 CreatePOST创建资源 UpdatePUT/PATCH全量/部分更新资源 DeleteDELETE删除资源  - 
自定义方法仅用于非标准操作(如
:undelete),通过POST /resource:verb格式映射 
 - 
 
一、用户管理(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}/subscriptions
➔ 取消文章订阅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
➔ 查询公司部门列表(父子)4POST /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}/locations
➔ 添加办公地点DELETE /v1/companies/{companyId}/locations/{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
➔ 获取组织架构树(嵌套父子结构)
设计要点总结
- 
父子资源嵌套原则:
- 子资源URI必须包含父ID(如
/users/{userId}/orders) - 若子资源可独立存在,需提供独立入口(如
/orders/{orderId}) 
 - 子资源URI必须包含父ID(如
 - 
HTTP方法选择:
PATCH用于局部更新,PUT用于全量替换- 非CRUD操作转为资源(如
POST /files/{id}/restore) 
 - 
批量操作:
- 使用
POST+ 资源复数形式(如POST /users/batch-delete) 
 - 使用
 - 
错误处理:
- 返回标准HTTP状态码(如
404 Not Found)及错误JSON 
 - 返回标准HTTP状态码(如
 - 
扩展性:
- 通过
fields参数过滤响应字段(?fields=id,name) 
 - 通过
 
自定义方法
自定义方法应谨慎使用,优先考虑标准方法,仅在标准语义无法满足时采用此模式。
根据 Google API 设计指南,当操作无法映射到标准 CRUD(Create、Read、Update、Delete)方法时,应使用自定义方法 (Custom Methods)。这些方法通过 POST 请求实现,并在资源 URI 后附加 :{action} 表示非标准操作。
在Google API设计规范中,自定义方法使用 :{action} 而非 /{action} 的URI格式(如 :batchDelete 而非 /batchDelete),这是经过严谨设计的语法规则,核心原因如下:
设计原则:区分资源 vs 操作
- 
/{action}的歧义性若使用
/batchDelete格式,会被解析为子资源路径 (如存在名为batchDelete的资源),而非操作指令。
错误示例:bashPOST /v1/users/batchDelete- 语义歧义:系统可能误认为要操作 
users下的batchDelete资源。 
 - 语义歧义:系统可能误认为要操作 
 - 
:{action}的明确性冒号语法显式声明这是一个动作 (动词),而非资源(名词)。
正确示例:bashPOST /v1/users:batchDelete- 语义清晰:对 
users资源执行batchDelete操作。 
 - 语义清晰:对 
 
二、语法规范:避免与子资源冲突
| 场景 | 路径格式 | 含义 | 
|---|---|---|
| 子资源 | /users/{userId}/photos | 
查询用户相册(资源实体) | 
| 自定义方法 | /users:search | 
执行搜索(操作指令) | 
若使用 /users/search:
- 系统会误认为 
search是users的子资源(如返回所有"search"类型的用户)。 - 而 
:search明确表示动作(在用户集合上执行搜索)。 
特殊案例:为什么 /search 被允许?
Google规范中 /search 是唯一例外 ,因其被定义为标准方法而非自定义方法:
            
            
              bash
              
              
            
          
          GET /v1/users/search?query=john
        - 
原因 :
search本质是List方法的扩展(过滤资源),属于标准查询行为。 - 
规范依据:
当操作是对资源的"查询"时(如过滤、排序),使用独立端点
/search。 
四、关键结论:何时用 : vs /
| 操作类型 | 示例 | URI 格式 | 
|---|---|---|
| 自定义方法(非标准操作) | 批量删除、发布、恢复 | POST /res:action | 
| 标准查询(过滤/搜索) | 搜索、复合条件列表 | GET /res/search | 
| 子资源操作 | 获取用户的订单 | GET /users/{id}/orders | 
以下是符合规范的 20 个典型示例,覆盖不同业务场景:
⚙️ 一、计算与处理类操作
- 
batchDelete- 场景:批量删除资源(如订单、文件)
 - URI :
POST /v1/orders:batchDelete 
 - 
calculate- 场景:执行复杂计算(如税费、预算)
 - URI :
POST /v1/invoices/{id}:calculateTax 
 - 
generateReport- 场景:生成动态报表(如销售统计)
 - URI :
POST /v1/sales:generateReport 
 - 
restore- 场景:恢复已删除资源(如文件、用户)
 - URI :
POST /v1/files/{fileId}:restore 
 - 
translate- 场景:翻译文本内容
 - URI :
POST /v1/documents/{id}:translate 
 
🔄 二、状态与流程管理
- 
publish- 场景:发布草稿资源(如博客、标签)
 - URI :
POST /v1/blogs/{blogId}:publish 
 - 
approve- 场景:审批工作流任务
 - URI :
POST /v1/tasks/{taskId}:approve 
 - 
cancel- 场景:取消进行中操作(如订单、订阅)
 - URI :
POST /v1/orders/{orderId}:cancel 
 - 
disable- 场景:停用资源(如账号、服务)
 - URI :
POST /v1/users/{userId}:disable 
 - 
resetPassword- 场景:重置用户密码(非标准更新)
 - URI :
POST /v1/users/{userId}:resetPassword 
 
📦 三、批量与聚合操作
- 
import- 场景:批量导入数据(如用户列表)
 - URI :
POST /v1/users:import 
 - 
export- 场景:导出资源集合(如报告数据)
 - URI :
POST /v1/reports:export 
 - 
sync- 场景:多端数据同步(如日历事件)
 - URI :
POST /v1/calendars/{id}:sync 
 
♻️ 四、资源生命周期扩展
- 
undelete- 场景:恢复逻辑删除的资源
 - URI :
POST /v1/projects/{projectId}:undelete 
 - 
archive- 场景:归档不再活跃的资源
 - URI :
POST /v1/documents/{id}:archive 
 - 
validate- 场景:校验资源有效性(如配置、表单)
 - URI :
POST /v1/forms/{formId}:validate 
 
🔗 五、关联资源操作
- 
attach- 场景:关联独立资源(如标签附加到文件)
 - URI :
POST /v1/files/{fileId}/labels:attach 
 - 
clone- 场景:复制资源(如项目模板)
 - URI :
POST /v1/templates/{id}:clone 
 - 
move- 场景:移动资源位置(如文件目录)
 - URI :
POST /v1/files/{fileId}:move 
 - 
merge- 场景:合并多个资源(如联系人去重)
 - URI :
POST /v1/contacts:merge 
 
以上示例完全遵循Google API设计规范,强调URI可读性、HTTP方法语义化及资源分层管理。完整规范可参考:Google Cloud API Design Guide。