我正在编写一个 REST API,想知道这是否是一个好的做法。
下面是示例 JSON 响应。
错误响应,
{
"code": 1100,
"status": false,
"message": "Values of imei/email/pin cannot be empty.",
"server_time": "2013-11-28 09:13:06"
}
成功响应,没有一些数据
{
"code": 200,
"status": true,
"data": {
"id": "2",
"isNewParent": false,
"firstName": null,
"lastName": null,
"dob": null,
"gender": null,
"username": null
},
"server_time": "2013-11-28 09:07:23"
}
成功响应,带数据
{
"code": 200,
"status": true,
"data": {
"id": "3",
"isNewParent": true,
"firstName": "Saman",
"lastName": "kalhara",
"dob": 2002-10-29,
"gender": 0,
"username": 'saman88'
},
"server_time": "2013-11-28 10:07:23"
}
问题是,关于没有数据的成功响应,一些移动开发人员要求 json 响应仅包含带有值的标记,并跳过空值。所以它看起来像,
{
"code": 200,
"status": true,
"data": {
"id": "2",
"isNewParent": false,
},
"server_time": "2013-11-28 09:07:23"
}
我陷入了两难的境地,不知道该怎么办。我更喜欢这种方式,并且想知道这是否会导致 API 请求性能缓慢。
最佳答案
它不应该导致任何缓慢。如果有什么不同的话,那就是减少了必须采用 JSON 格式的键/值的数量。但是,除非您收到难以想象的流量并且不缓存,否则删除 null
值不会对性能产生任何巨大影响。
但是,在这种情况下,我认为最佳实践取决于您父亲的存储方式。我不明白为什么某些东西可以有 ID,但没有用户名、出生日期、性别、名字或姓氏。这有什么原因吗?
除非 ID 有意义,否则我对这两种解决方案的反驳将是这样的响应:
{
"code": 200,
"status": true,
"data": {},
"server_time": "2013-11-28 10:07:23"
}
此外,如果您想严格遵守 REST,则应使用内置的 HTTP 状态代码,并且仅在 HTTP 状态不能完全解释响应时才添加其他错误信息。
考虑到响应应该返回数据,我想说,为了一致性,您应该为每个包含数据的响应维护一个恒定的结构。通过这种方式,开发人员不必进行过多的检查来确保在检索所需的所有字段之前都已定义它们。判断一个字段是否定义就像data['field'] === null
一样简单,所以我不理解开发者的不安。如果他们的提示是为了节省字节,除非他们发出数千个请求,否则数据对象中存在一些空值根本不会产生太大影响。
关于php - REST API,成功和错误的数据返回方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20261125/