将元数据添加到 RESTful JSON 响应的最佳实践是什么?
背景
我们正在构建一个 Restful API,它应该将数据对象作为 JSON 返回。在大多数情况下,只需返回数据对象即可,但在某些情况下,f.ex.分页或验证,我们需要向响应添加一些元数据。
到目前为止,我们有什么
我们已经包装了所有json响应,如以下示例所示:
{
"metadata" :{
"status": 200|500,
"msg": "Some message here",
"next": "http://api.domain.com/users/10/20"
...
},
"data" :{
"id": 1001,
"name": "Bob"
}
}
优点
- 我们可以向响应中添加有用的元数据
缺点
- 在大多数情况下,我们不需要元数据字段,这会增加json格式的复杂性。
- 由于它不再是数据对象,而更像是包络响应,因此我们不能在不提取数据对象的情况下立即在f.ex骨干.js中使用响应。
问题
向 json 响应添加元数据的最佳做法是什么?
更新
到目前为止,我从下面的答案中得到的答案:
- 删除返回 http 协议中的 http 响应代码 (200, 500 ...)
metadata.status
- 将错误消息添加到 http 500 repsonse 的正文中
- 对于分页,我自然会有一些元数据来说明分页结构,以及嵌套在该结构中的数据
- 可以将少量元数据添加到 http 标头(X-something)