Web services 域数据错误时返回哪个HTTP状态?

Web services 域数据错误时返回哪个HTTP状态?,web-services,rest,http,status,Web Services,Rest,Http,Status,我正在开发一个与其他Web服务集成的RESTful应用程序 我的问题是,如果我的客户端发布的数据对其中一个Web服务无效,我应该返回哪个HTTP状态?例如,如果它发布的名称对我的应用程序使用的Web服务无效,那么考虑到这是用户输入错误,我应该返回4**个状态码中的哪一个 我做了一些考虑,以及为什么我不喜欢使用它们: 400:数据无效,但请求格式本身无效 403:服务器没有拒绝响应,尽管数据无效 406:错误在提供的参数中,而不是在“接受”标题中 412:错误与“If Match”标题无关 那

我正在开发一个与其他Web服务集成的RESTful应用程序

我的问题是,如果我的客户端发布的数据对其中一个Web服务无效,我应该返回哪个HTTP状态?例如,如果它发布的名称对我的应用程序使用的Web服务无效,那么考虑到这是用户输入错误,我应该返回4**个状态码中的哪一个

我做了一些考虑,以及为什么我不喜欢使用它们:

  • 400:数据无效,但请求格式本身无效
  • 403:服务器没有拒绝响应,尽管数据无效
  • 406:错误在提供的参数中,而不是在“接受”标题中
  • 412:错误与“If Match”标题无关

那么,在这种情况下您会使用什么呢?

在现实生活中,REST和其他web服务的HTTP状态代码可能很模糊,很难明确指定。如果您的客户机实际上正在与代理服务器通信,并且该代理服务器发回自己的状态,那么事情也会变得有趣。如果您的web服务(可能在应用程序下方)出现问题,您可能只会得到500


在过去,我会选择返回200并使用您自己的JSON或任何结构为您的客户端返回错误信息。

在现实生活中,REST和其他web服务的HTTP状态代码可能很模糊,很难明确指定。如果您的客户机实际上正在与代理服务器通信,并且该代理服务器发回自己的状态,那么事情也会变得有趣。如果您的web服务(可能在应用程序下方)出现问题,您可能只会得到500



在过去,我会选择返回200,并使用您自己的JSON或任何结构为您的客户返回错误信息。

坚持使用400,或查看422(可能接近您需要的)。

坚持使用400,或查看422(可能接近您需要的).

一些可能有助于理解此场景的内容:假设我的应用程序使用的Web服务表示用户已停用,因此Web服务无法对其进行操作。一些可能有助于理解此场景的内容:假设我的应用程序使用的Web服务表示用户已停用,所以webservice无法在他身上运行。很好,谢谢,我将使用状态200和“成功”作为JSON响应属性之一。:-)另一件事,你可能会考虑发送一个特殊的HTTP响应头。X-MyServer-Magic。如果您的客户机没有看到该标题,那么它很可能是在与一个捕获的web门户或其他东西交谈。有些人可能会把这称为工程,但这是我不得不处理的现实问题。同意朱利安的观点。不要返回200。我同意其余的“规范”规定了HTTP状态代码以指示成功/失败。然而,现实生活并不总是这么简单。如果你的电话号码是200,你怎么知道你的电话没有被捕获的门户截获?你如何解读500年?所以我所做的是假设2xx的意思是“它可以工作到与我的服务对话”,但在我可以完全控制语义的地方使用错误处理;HTTP状态是关于客户机和服务之间通信成功与否的一个非常好的信息源,但它们并不总是达到我们需要的程度。因此,我所做的是在JSON响应中嵌入一个“successful”字段,如果没有,则嵌入错误消息。很好,谢谢,我将使用状态200和“successful”作为JSON响应属性之一。:-)另一件事,你可能会考虑发送一个特殊的HTTP响应头。X-MyServer-Magic。如果您的客户机没有看到该标题,那么它很可能是在与一个捕获的web门户或其他东西交谈。有些人可能会把这称为工程,但这是我不得不处理的现实问题。同意朱利安的观点。不要返回200。我同意其余的“规范”规定了HTTP状态代码以指示成功/失败。然而,现实生活并不总是这么简单。如果你的电话号码是200,你怎么知道你的电话没有被捕获的门户截获?你如何解读500年?所以我所做的是假设2xx的意思是“它可以工作到与我的服务对话”,但在我可以完全控制语义的地方使用错误处理;HTTP状态是关于客户机和服务之间通信成功与否的一个非常好的信息源,但它们并不总是达到我们需要的程度。因此,我所做的是在JSON响应中嵌入一个“successful”字段,如果没有,则错误消息。422似乎是特定于WebDAV的,我想知道这会如何影响我的服务的语义。400是一个格式错误的请求,不是我想要的。不过还是要谢谢你的提示。:-)不,422不是特定于WebDAV的。它恰好是在WebDAV中定义的。422似乎是特定于WebDAV的,我想知道这会如何影响我的服务的语义。400是一个格式错误的请求,不是我想要的。不过还是要谢谢你的提示。:-)不,422不是特定于WebDAV的。它恰好是在WebDAV中定义的。