【发布时间】:2017-05-26 04:08:14
【问题描述】:
如果已经有答案,我深表歉意。我找到了相关的问题(例如HTTP status code for a partial successful request),但并不完全相同。
我正在构建一个返回从多个来源聚合的数据的 API。有时,数据的某些关键部分不可用,必须让客户端知道并在响应中包含错误数据。
除了缺少字段的严重性之外,资源的其余部分是有效和有用的,可以被视为部分更新(例如,如果您只有权限查看资源的一部分)。
到目前为止,选项是
- 返回 200,将其视为部分资源,像处理任何其他数据一样处理应用程序中的错误数据字段
- 返回 207 以强调它没有完全成功,但 207 并不是严格意义上的 HTTP。
- 返回 500 并在应用程序中处理成功返回的数据,就像在 200 上一样
我偏爱选项 1,但我并不完全相信。有没有明确的处理方法?也许定义一个特定的content-type?
【问题讨论】:
-
它是主观的,我个人认为500是合适的,因为数据是错误的,它不符合相应请求的期望。您可以添加任何您喜欢的自定义响应标头,例如
X-Response-Type: partial并指示您的客户在处理响应数据之前参考该值,如果他们收到代码 500 -
嗨@AlexK。我可以看到 500 的情况,但是由于我们以一种有用的方式专门处理数据的缺失,并且资源可以(并且是)以一致的方式返回,所以 200 会更合适。如果你想画一个平行线,我会说它类似于代码中的已处理异常,而 500 类似于未处理的异常。也许这不是一个很好的平行线?我们正在返回一个内容类型,突出显示部分信息以提醒客户。从你的 POV 来看,这有意义吗?
-
就我个人而言,我会返回
200并指出响应正文中缺少哪些数据(您的选项 #1)。据我所知,REST 非常以资源为中心,因为在您的情况下,资源是有效且有用的(换句话说,“它存在”),200似乎成为最佳选择。愚弄content-type也可能不是一个好主意,因为这可能会使一些客户感到困惑。只需使用普通的application/json(或 XML)即可。我还注意到许多 API 倾向于“错误”地处理200并将丰富的状态作为数据返回。这种方式似乎更“惯用”。
标签: rest api http http-response-codes