日常和开发约定 JSON 接口,每次项目都按开发个人喜好给,各种字段定义和命名规范,没法满足我强烈的代码洁癖症。JSend 规范足够简单地描述了 JSON 接口结构,具备普遍适用性,推荐给大家。
———- 分割线 ———-
一个基本的遵循 JSend 规范的响应,就这么简单:
{
status : "success",
data : {
"post" : { "id" : 1, "title" : "A blog post", "body" : "Some useful content" }
}
}
编写 JSON API 时,你需要不同的类型来描述各种调用和响应。JSend 将响应分成一些基本的类型,同时指定了必要的和可选的字段:
类型 | 描述 | 必要字段 | 可选字段 |
success | 一切正常,并且(通常是)返回了一些数据 | status, data | |
fail | 提交的数据有问题,或者 API 调用的一些前提条件不满足 | status, data | |
error | 处理请求时出错,例如:一个异常被抛出 | status, message | code, data |
成功: 当 API 调用成功时,JSend 对象只对作简单包裹,使用 data
字段即可,例如:
GET /posts.json:
{
status : "success",
data : {
"posts" : [
{ "id" : 1, "title" : "A blog post", "body" : "Some useful content" },
{ "id" : 2, "title" : "Another blog post", "body" : "More content" },
]
}
}
GET /posts/2.json:
{
status : "success",
data : { "post" : { "id" : 2, "title" : "Another blog post", "body" : "More content" }}
}
DELETE /posts/2.json:
{
status : "success",
data : null
}
必要字段:
失败: 当 API 调用由于无效数据或不满足调用条件而被拒绝时,JSend 对象定义了一个用于说明出错原因的字段,通常是字段验证错误。例如:
POST /posts.json: (假定请求数据为 body: "Trying to creating a blog post"
)
{
"status" : "fail",
"data" : { "title" : "A title is required" }
}
必要字段:
POST
值,响应对象的字段应当和这些 POST
值一一对应。错误: 当由于服务器的错误导致 API 调用失败时候,例如:
GET /posts.json:
{
"status" : "error",
"message" : "Unable to communicate with database"
}
必要字段:
可选字段:
你可能会问,HTTP 默认已经提供了响应状态,为什么不直接使用?
我们知道,在 HTTP 协议提供了 41 种状态码,以及每一种状态码的适用场景,但无法准确地描述服务端的信息状态。JSend 则从应用服务的层面,补充和规范了更多受限制的状态集合,指导用户界面交互中处理 JSON 数据的过程。