当批量更新的一部分失败时,我应该返回什么状态代码



假设我是一台服务器,响应某些实体的批量创建请求。假设我也决定做到这一点,以便如果无法创建一个实体的实例,由于服务器错误或用户错误,我仍然会创建其他实体实例。在这种情况下,我应该返回什么?201是因为我在请求中创建了大多数实体?还是4xx/5xx,因为创建一个实体时出现了错误?

如果您返回一个4xx代码,则意味着整个请求失败了,服务器状态尚未更改。

如果请求的目的是做"一个或多个事情,有些可能会失败",那么部分应用程序仍然是成功的,因此将其放在2xx范围内。

206不是一个好主意。这是专门用于使用Range的请求,此处并非如此。

207 可以使用。您可能需要定义自定义格式,而不是基于默认的XML ON。我的投票可能只会转到200

另外,考虑只做许多请求。请求便宜,为什么要把它们混在一起?现在,每个请求都可以具有自己美丽,准确的状态代码。

在这种情况下,您可以返回多态响应(207)响应,您可以在其中确认每个批处理条目的结果。这样一来,客户就可以完全了解结果。但是,这种类型的HTTP状态涉及在客户端上更复杂的处理。

我认为201不是一个不错的选择,因为它说"接受",这意味着一切都还好。但不是在你的情况下。也许206是一个好主意,它的意思是"部分内容",根据Wiki的说法,"服务器仅提供资源的一部分..."

最新更新