REST API中的警告不是严重错误


9

我有一个REST API,对于某些企业(例如DELETE,POST或PUT),我有一些验证规则可以返回错误。

现在,我需要一种新的错误类型,例如非严重错误,它应该以正常方式失败,但是如果发送了“禁止警告”标志,则应该执行该操作。可以问这样的用户:“您确定要更改此状态,您尚未完成”

问题:是否存在针对此类错误的最佳实践?

次要问题

  • 我可以使用这种行为的任何HTTP语义吗?
  • 我仍然遵循REST的想法吗(对我来说,我看起来确实如此)-我保持它为无状态

您如何决定是否向用户显示此类警告?您调用API端点以检查应用程序状态,然后向用户显示这样的对话框,阻塞UI,直到用户响应为止。然后,您进行实际的呼叫。您也应该使用REST API对此进行建模:添加一个端点以检查是否保存了它可以执行某些任务。这样,任何API用户都可以进行“飞行前”检查,甚至可以将决策委派给用户。您的HTTP状态代码方法就像一种rm /file“警告”文件的方式,无论如何都将其删除。
最终

当业务与协议状态代码重叠时,就会发生这种情况。无论如何。您是否尝试使用自己的'HTTP状态代码?如果Twitter可以,您也可以。比方说6xx?无论如何,到目前为止,我知道,您可以将消息添加到响应正文中,即使它是4xx(根据您的情况,该范围也可以)。
Laiv

最后,我使用 409 CONFLICT了警告响应。这样,指示客户端可以使用额外的参数“ force = 1”强制具有相同终结点和主体的呼叫
user237329 2015年

Answers:


4

http中没有警告结果代码,您将返回成功(200)或错误(400,500)。我所知道的唯一与您想要的类似的东西是类似代码401“未经授权”的代码-这是完全失败的,但是会导致大多数客户端自动重新尝试使用凭据进行连接。

对于REST API,您需要告诉服务器请求的状态以及如何处理结果-如果客户端未完成,则无法发送PUT并期望出现错误,如果客户端未成功,则无法成功-服务器需要知道这一点信息,以便发回正确的结果代码。

因此,您可以在请求中发送“禁止警告”标志,如果未设置,服务器将返回409错误代码(或类似的错误代码),如果设置,则返回200代码。发送状态更改后,无法询问用户“您是否要更改此状态”。

您可以向服务器发出请求,询问用户是否可以更改课程状态,然后再提出适当的请求。


我绝不是说这样做是对的,但是3xx代码可以看作是客户可以决定继续执行的某种通知或警告代码。就是说,我宁愿执行一个动作还是不执行某个动作,也许我返回一个响应,并在返回的正文或标头中返回附加信息。
Archimedix

0

如果希望允许用户替代常规错误处理,则可以考虑返回200 SUCCESS状态,并在扩展的HTTP标头中提供附加信息。例如,您可以返回

X-APP-STATUS: 422 Unprocessable entity
X-APP-SOURCE: Invalid ID 'fo0'

这将为您的客户端代码提供警告用户或自行采取纠正措施所需的信息。


2
我从不喜欢说“我成功失败”的回复:-)
gbjbaanb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.