Restful 接口规格
本章将给出用于数据交换(Request + Response)的文档规格。文档遵循 JSON RFC7159 格式。
#
请求(Request)#
组成要素要素 | 描述 |
---|---|
HTTP 方法 | GET:获取资源 POST:创建资源、向资源提交数据进行处理 PUT:整体更新资源,即整体替换,如更新密码 PATCH:部分更新资源,即差分更新(Merge),如更新用户信息 DELETE: 删除资源 |
API 服务 URL | 提供服务的 URL ,如:http://api.somesite.com |
资源 URI | 查询、创建、更新、删除的资源 URI ,如:/tenants/{tenantId}/orders |
查询参数(Query Parameters) | 用于过滤、限制大小、排序返回结果的参数 |
HTTP 请求头(Request Header) | 包含授权等信息 |
JSON 请求体 | POST、PUT、PATCH 请求所需的数据 |
#
URI 命名规范为了保证请求能正确到达服务端,URI需遵循以下命名规范:
- 名称只能包含下列字符,不能包含保留字符以及不安全字符:
保留字符是指在URL中具有特定意义的字符。不安全字符是指那些在URL中没有特殊含义,但在URL所在的上下文中可能具有特殊意义的字符。
- 名称中英文字母全部采用小写
- 名称不能以 “-“ 开头
URI示例:
#
查询参数(Query Qarameters)对于 REST GET 请求可以指定若干查询参数。这些参数用于指定过滤条件、限制数据数量和排序。
#
命名规范查询参数采用驼峰式命名,和程序中的变量风格保持一致。
#
过滤条件(filter)下面的GET请求用于返回指定日期内的创建的订单数据。
#
限制数据数量和排序(limit size and sort)参数 | 类型 | 描述 |
---|---|---|
page[no] 或pageNo | integer | 已取得记录列表中最后一条记录的 ID,用于取得更多记录 |
page[size] 或 pageSize | integer | 一次取得的件数,即客户端一页显示的件数 |
sortBy | string | 格式为 sortBy[field1]={oder1}&sortBy[field1]={oder1} 或sortBy[0]=field1:oder1&sortBy[1]=field2:oder2 asc :升序;desc :降序 |
下面的GET请求用于返回最新20件订单数据
#
HTTP 请求头(Request Header)头 | 描述 |
---|---|
Accept | 客户端可接收的应答内容类型。 Accept: application/json |
Authorization | 服务端配发的 JWT 令牌。 Authorization: Bearer <token> |
Content-Type | 请求内容类型,服务端根据此类型解析请求数据。 Content-Type: application/json |
#
应答(Response)应答内容包含 HTTP 状态码和 JSON 格式的有效载荷(payloads)两个部分。
#
请求成功对于请求成功将返回 2XX
HTTP 状态码:
状态码 | 描述 |
---|---|
200 OK | 请求成功。 |
201 Created | POST 方法成功创建一个资源。如果该资源已经被创建返回 200 状态码。 |
202 Accepted | 服务端成功接收请求,请求将被延后处理。 |
204 No Content | 服务端成功执行请求,无返回值。 |
#
请求错误对于请求错误将返回 4XX
或 5XX
HTTP 状态码:
状态码 | 错误代码及描述 | 原因 |
---|---|---|
400 Bad Request | INVALID_REQUEST 请求格式、语法不正确或未通过输入数据校验 | 可能的原因如下: |
401 Unauthorized | AUTHENTICATION_FAILURE 认证(Authentication)失败,无效的凭证(credentials) | 请求需要认证,调用者未提供有效凭证 |
403 Forbidden | NOT_AUTHORIZED 授权(Authorization)失败,没有足够权限 | 尽管调用者提供了有效的凭证,但没有被授权访问本资源 |
404 Not Found | RESOURCE_NOT_FOUND 指定的资源不存在 | 请求的 URI 不正确或 URI 对应的资源不存在。 如:数据中没有和指定主键匹配的数据。 |
405 Method Not Allowed | METHOD_NOT_SUPPORTED 服务端没有实现请求的 HTTP 方法 | 服务不支持请求的 HTTP 方法 |
406 Not Acceptable | MEDIA_TYPE_NOT_ACCEPTABLE 服务端没有实现客户端可接受的媒体类型 | 服务端不能用客户端请求的媒体类型返回答应。 如客户端发送可接收 application/xml,服务端却只能生成 application/json 的应答 |
415 Unsupported Media Type | UNSUPPORTED_MEDIA_TYPE 服务端不支持请求中有效载荷的媒体类型 | 服务端不能处理请求中有效载荷的媒体类型。如客户端发送 application/xml 类型请求,服务端只接收 application/json 媒体类型 |
429 Unprocessable Entit | RATE_LIMIT_REACHED 到达API 限流值,阻塞请求 | API 请求达到了限流值 |
500 Internal Server Error | INTERNAL_SERVER_ERROR 内部服务错误 | 服务端发生了非预期的错误 |
503 Service Unavailable | SERVICE_UNAVAILABLE 服务无效 | 因临时维护服务端不能处理请求 |
#
JSON 有效载荷结构根元素必须是一个 JSON 对象,对象包含以下元素:
名称 | 类型 | 必须 | 说明 |
---|---|---|---|
success | 布尔 | 必须 | 返回结果成功标志,true 或 false。与 2XX HTTP状态码 一起使用作为成功标志 |
error | 对象 | 必须 | 错误对象,data 和 error 不能同时出现 |
data | 对象 | 必须 | 数据对象,data 和 error 不能同时出现 |
error 对象:
名称 | 类型 | 必须 | 说明 |
---|---|---|---|
code | 字符串 | 必须 | 可读的唯一识别编码。例如: NOT_AUTHORIZED |
message | 字符串 | 必须 | 错误描述。例如:授权失败,没有足够权限 |
fields | 数组 | 可选 | 校验错误中的多个错误的描述,通常含有 name 和 message 两个属性 |