Web services 无法更新的资源的REST响应代码

Web services 无法更新的资源的REST响应代码,web-services,rest,http-status,Web Services,Rest,Http Status,我有一个无法更新的资源(事件)。因此,我只允许Post&Get操作。(我没有选择PUT,因为eventId是在服务器端生成的,并作为响应的一部分返回) 我在输入中已经有了三个字段的组合,可以用来标识唯一的资源 有鉴于此,如果有人两次发布相同的请求,这就是我期望返回的结果 案例1:如果数据库中已经存在唯一字段,并且请求已完成 与前一个完全相同,然后我们忽略这个请求(因为 资源已存在) 案例2:如果数据库中已经存在唯一字段,但 请求是不同的,然后发送错误响应说它不是 支持 在案例1和案例2中,要

我有一个无法更新的资源(事件)。因此,我只允许Post&Get操作。(我没有选择PUT,因为eventId是在服务器端生成的,并作为响应的一部分返回)

我在输入中已经有了三个字段的组合,可以用来标识唯一的资源

有鉴于此,如果有人两次发布相同的请求,这就是我期望返回的结果

  • 案例1:如果数据库中已经存在唯一字段,并且请求已完成 与前一个完全相同,然后我们忽略这个请求(因为 资源已存在)
  • 案例2:如果数据库中已经存在唯一字段,但 请求是不同的,然后发送错误响应说它不是 支持
在案例1和案例2中,要返回的正确响应代码应该是什么

谢谢, 哈里什编辑:

由于409或400都不适合您的情况,因此可能422个不可处理实体


也许你正在寻找的是冲突

如果您想向客户端发出信号,表明失败是“最终的”,并且没有请求编辑会改变这一点,那么另一个选项是400错误请求

就我个人而言,我只在请求语法非法时才使用400,但这里的情况并非如此。

编辑:

由于409或400都不适合您的情况,因此可能422个不可处理实体


也许你正在寻找的是冲突

如果您想向客户端发出信号,表明失败是“最终的”,并且没有请求编辑会改变这一点,那么另一个选项是400错误请求


就我个人而言,我只在请求语法非法时使用400,这里不是这样。

如果调用是幂等的,也就是案例1,我希望它返回一个200 OK,因为它并没有真正失败,这与在执行PUT时使用相同的值进行更新是一样的

如果调用不是幂等的,即情况2,那么即使用户实际上不应该重试调用,也会出现409冲突。这是因为根据您所说的,实际上允许用户发送具有相同标识符的请求,前提是所有其他参数也相同


而且,这只是我的直觉,如果用户尝试使用不同的参数来查看不同类型的响应代码,他可以确定资源的当前状态,即使可能不允许他阅读。因此,根据应用程序的范围,您可能希望返回相同的响应。

如果调用是幂等的,即情况1,我希望它返回一个200 OK,因为它并没有真正失败,这与执行PUT时使用相同的值进行更新相同

如果调用不是幂等的,即情况2,那么即使用户实际上不应该重试调用,也会出现409冲突。这是因为根据您所说的,实际上允许用户发送具有相同标识符的请求,前提是所有其他参数也相同


而且,这只是我的直觉,如果用户尝试使用不同的参数来查看不同类型的响应代码,他可以确定资源的当前状态,即使可能不允许他阅读。因此,根据应用程序的范围,您可能希望返回相同的响应。

我看到了。。但409表示,用户可以在更正后重新提交请求。但在我的例子中,它只是不受支持,用户不应该重试,因为资源已经存在,我们不支持更新。因此,我不能使用409,然后可能是400——请记住,许多/大多数人会认为使用它不合适。或者422不可处理实体422对于案例2来说似乎很好(尽管我仍然不确定案例2是否属于语义错误类别)。案例1的错误代码应该是什么?我个人会使用409,因为它表明用户可能能够解决冲突,并建议服务器返回解释性负载。我看到了。。但409表示,用户可以在更正后重新提交请求。但在我的例子中,它只是不受支持,用户不应该重试,因为资源已经存在,我们不支持更新。因此,我不能使用409,然后可能是400——请记住,许多/大多数人会认为使用它不合适。或者422不可处理实体422对于案例2来说似乎很好(尽管我仍然不确定案例2是否属于语义错误类别)。案例1的错误代码应该是什么?我个人会使用409,因为它表明用户可能能够解决冲突,并建议服务器返回一个解释性负载。我喜欢你认为如果不允许该用户阅读,可能会出现安全漏洞。虽然这不是我当前的用例。对于案例2,使用422如何?响应422专门用于语义错误之类的案例,在您的案例中,这也不是真的,因为如果第二个请求首先出现,它在语义上也是正确的。第二个请求不是指定超出范围的参数或类似的东西,所以我想说它不是422。谢谢。当然,如果第二个请求首先出现,这是有道理的。。那么它就不可能在语法上变得神奇正确。谢谢你的澄清。案例1将使用200,案例2将使用409。我喜欢你的想法,如果不允许该用户阅读,则可能存在安全漏洞。虽然这不是我当前的用例。对于案例2,使用422如何?响应422专门用于语义错误之类的案例,在您的案例中,这也不是真的,因为如果第二个请求首先出现,它在语义上也是正确的。第二个请求不是指定超出范围的参数或类似的东西,所以我想说它不是422。谢谢。如果美国证券交易委员会