【问题标题】:REST API, data returning way for success and errorREST API,成功和错误的数据返回方式
【发布时间】:2013-11-28 08:32:12
【问题描述】:

我正在编写一个 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 请求性能下降。

【问题讨论】:

  • 我会保持原样,以便在响应中始终具有相同的变量。由开发人员来测试变量是否真的有值。鉴于发送的“额外”数据量很小,对性能没有真正的影响。请注意,如果我没记错的话,您的数据应该在引号之间......
  • 谢谢@Bartdude。请检查我对以下答案的评论。 :)

标签: php json web-services api rest


【解决方案1】:

它不应该导致任何缓慢。如果有的话,您正在减少必须是 JSON 的键/值的数量。但是,除非您收到难以想象的流量并且您不缓存,否则删除 null 值不会对性能产生任何巨大影响。

不过,在这种情况下,我认为最佳做法取决于您父亲的存储方式。我不明白怎么会有一个 ID,但没有用户名、出生日期、性别、名字或姓氏。这是有原因的吗?

除非 ID 有意义,否则我对这两种解决方案的反驳都是这样的:

{
  "code": 200,
  "status": true,
  "data": {},
  "server_time": "2013-11-28 10:07:23"
}

另外,如果你想严格遵守 REST,你应该使用内置的 HTTP 状态代码,并且只在 HTTP 状态不能完全解释响应时添加额外的错误信息。


鉴于响应应该返回数据,我想说,为了保持一致性,您应该为每个包含数据的响应维护一个恒定的结构。这样,开发人员不必进行过多的检查,以确保在检索之前定义了他们需要的所有字段。确定一个字段是否被定义就像data['field'] === null 一样简单,所以我不理解开发者的不安。如果他们的抱怨是基于节省字节,除非他们发出数千个请求,否则数据对象中的一些空值根本不会产生太大影响。

【讨论】:

  • 谢谢。有理由只返回 data 下的 id。在某些情况下,用户(父母)可以选择使用提供的密码和电子邮件登录。因此,当用户插入这两个并登录时,下一个选项是更新用户配置文件。因此,如果应用程序出现问题,在更新配置文件之前,它只能包含经过验证的 id,但需要更新配置文件。所以“isNewParent”:假。请随时提出您的建议。
  • 这对我来说听起来不太平静。 RESTful API 应该是无状态的(查看会话模式)。考虑到这一点,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2020-11-05
  • 1970-01-01
  • 2015-03-21
相关资源
最近更新 更多