Skip to content
On this page

接口设计规范

路由设计规范

建议路由使用Restful的方式来缩短URI

请求方法

请求方法含义
Get获取数据对象
Post创建数据对象/执行动作
Put完全替换数据对象
Patch更新数据对象的指定属性
Delete删除数据对象

URI

  • 路径中非参数的部分, 使用 - 连缀
/path/my-path
  • 建议以对象层级的方式进行描述
GET: /users/:userId  //users指的是所有用户,userId是一个路径参数, 该uri的语义就是获取所有用户中userId=xxx的这个用户的数据对象
  • 建议URI统一加前缀以区分服务, 后面可以加版本号区分接口版本
/user-service/......
/user-service/v1/......
  • 对于BFF的API接口, 建议加上 /api 前缀, 与Http RPC做出区分
/api/xxx-service/v1/......
  • 如果某个 api 接口其作用是执行一个动作
POST /api/xxx-service/v1/op/xx-action
POST /api/xxx-service/v1/op/xxx

参数

  • 对于Get请求, 使用 路径参数 + Query参数的方式

  • 对于非Get请求, 使用 路径参数 + Json Request Body

  • 请求参数使用小驼峰格式, 如 /path?userName=xxx&userType=xxx, 便于前后端开发

  • 路径参数用来指定具体的对象, 一般是id, 例如 /project/:projectId/sub-projects/:subProjectId

响应

  • 使用Json响应

  • HttpCode代表响应状态

HttpCode响应状态
200Ok, 请求没问题都可以用这个
202Accepted, 如果是异步动作, 可以用这个表示请求已被接受
400Bad Request, 错误的请求, 参数错误可以用这个表示, 没有满足Api接口的要求/校验
401Unauthorized, 未授权, 没有授权或者虚假的授权
403Forbidden, 禁止访问的资源, 401是限制用户的可访问, 403是限制资源的可访问
404Not Found, 未找到请求的资源
500Internal Server Error 一般该代码指代Unknow异常

注意: 对于前端来说, 400/401/403/500 都可以统一拦截, 其他代码则由调用者进行处理

错误处理

  • 当HttpCode != 2xx时, Response Body中就应该是Error的内容, 至少要包括两个字段 reason 和 message, reason表示错误的原因(枚举Key), message则是显示或者描述该错误的字段
Response.status = 404

Response.body = {
  "reason": "USER_NOT_FOUND",
  "message": "user not found, invalid userId"
}

API 基础CRUD定义

List

列表结构

  • 树形结构
    • 参考:department
  • 全量列表
  • 分页列表

Tree

api
@doc "查询对象树形列表"
@handler ListObjectTree
get /object-tree (ListObjectTreeRequest) returns (ListObjectTreeReply)

ListAll

api
@doc "查询对象全量列表"
@handler ListObjects
get /objects (ListObjectsRequest) returns (ListObjectsReply)

ListPage

api
@doc "查询对象分页列表"
@handler PageListObjectsPage
get /objects (ListObjectsPageRequest) returns (ListObjectsPageReply)

Get 获取对象

api
@doc "获取对象"
@handler GetObject
get /objects/:id (GetObjectRequest) returns (GetObjectReply)

Create 创建对象

api
@doc "创建对象"
@handler CreateObject
post /objects (CreateObjectRequest) returns (CreateObjectReply)

Upsert 创建或更新对象

api
@doc "创建或更新对象"
@handler UpsertObject
post /objects (UpsertObjectRequest) returns (UpsertObjectReply)

Update

Put 全量更新对象

api
@doc "全量更新对象"
@handler PutObject
put /objects/:id (PutObjectRequest) returns (PutObjectReply)

Patch 增量更新对象

api
@doc "增量更新对象"
@handler PatchObject
patch /objects/:id (PatchObjectRequest) returns (PatchObjectReply)

Delete 删除对象

api
@doc "删除对象"
@handler DeleteObject
delete /objects/:id (DeleteObjectRequest) returns (DeleteObjectReply)

Released under the Apache-2.0 license