Rest 仅部分数据可用时检索资源的HTTP响应

Rest 仅部分数据可用时检索资源的HTTP响应,rest,api,http,http-response-codes,Rest,Api,Http,Http Response Codes,如果已经有了答案,我道歉。我发现了相关的问题(例如),但并不完全相同 我正在构建一个API,它返回从多个源聚合的数据。有时,数据的某些关键部分不可用,必须让客户知道,并且在响应中包含错误数据 除了缺少字段的严重性之外,资源的其余部分是有效和有用的,可以视为部分更新(例如,如果您只有查看部分资源的权限) 到目前为止,选择是可行的 返回200,将其视为部分资源,处理应用程序中的错误数据字段,就像您使用任何其他数据一样。 返回207以强调它并非完全成功,但207并非严格意义上的HTTP 返回500并在

如果已经有了答案,我道歉。我发现了相关的问题(例如),但并不完全相同

我正在构建一个API,它返回从多个源聚合的数据。有时,数据的某些关键部分不可用,必须让客户知道,并且在响应中包含错误数据

除了缺少字段的严重性之外,资源的其余部分是有效和有用的,可以视为部分更新(例如,如果您只有查看部分资源的权限)

到目前为止,选择是可行的

返回200,将其视为部分资源,处理应用程序中的错误数据字段,就像您使用任何其他数据一样。
  • 返回207以强调它并非完全成功,但207并非严格意义上的HTTP
  • 返回500并在应用程序中处理成功返回的数据,就像在200上一样

  • 我倾向于选择1,但我不完全相信。有没有明确的处理方法?也许定义一个特定的
    内容类型

    您没有抓住这里的要点,因为500表示系统或通信链出现故障,并且由于返回了数据,因此必须假设资源存在并找到了。OP指出的是部分结果,意味着与资源相关的复合数据。这必然超出了http的范围,http通过成功的200完成了它的工作,除非您选择了一个合同,根据该合同,部分数据是错误的,因此是40倍。

    主观上,我个人认为500是合适的,因为数据是错误的,它不符合相应请求的预期。您可以添加任何您喜欢的自定义响应头,例如
    X-response-Type:partial
    ,并指示您的客户在处理响应数据之前参考该值(如果他们收到代码500Hi@AlexK)。我可以看到500的情况,但由于我们以一种有用的方式专门处理缺少数据的情况,并且资源可以(并且是)以一致的方式返回,所以200更合适。如果你想画一个平行图,我会说它在代码中类似于一个已处理的异常,而500类似于一个未处理的异常。也许这不是一个很好的类比?我们将返回一个内容类型,该类型突出显示部分信息以提醒客户端。从您的POV来看,这有意义吗?我个人会返回
    200
    ,并指出响应正文中缺少哪些数据(您的选项#1)。据我所知,REST非常以资源为中心,因为在您的案例中,资源是有效和有用的(换句话说,“它是存在的”),
    200
    似乎是最佳选择。愚弄
    内容类型
    也可能不是一个好主意,因为这可能会混淆一些客户机。只需使用普通的
    应用程序/json
    (或XML)。我还注意到,许多API倾向于向
    200
    方向“出错”,并返回丰富的状态作为数据。这样看起来更“惯用”。不过,我的想法是准确的(我想我可以更清楚地回答我的问题),系统依赖于从多个数据源聚合的数据,并且由于随机原因,由于数据源不可用,单个字段可能会丢失。换句话说,这是沟通链上的失败。问题是,在一个复杂的聚合系统上,这些故障可能很常见,返回的正确状态代码是什么。