.net HTTP Web服务和HTTP响应代码

.net HTTP Web服务和HTTP响应代码,.net,web-services,http,.net,Web Services,Http,我正在编写一个简单的XML HTTP请求/响应服务,并正在寻找有关如何响应调用方的建议 鉴于响应是XML,您是否建议: 始终返回HTTP状态200,并使用一种“返回代码”方法将响应成功/失败嵌入XML中?e、 g. 使用HTTP状态代码指示成功或失败 这可能类似于。我认为您应该选择选项1,因为您的请求可能会成功,但在api的后端出现了一些失败。虽然我不会一直返回200的响应代码,但您可能会遇到这样的情况,即web服务的url不存在,在这种情况下,您希望返回相应的响应代码。只有在您的请求有效且响应

我正在编写一个简单的XML HTTP请求/响应服务,并正在寻找有关如何响应调用方的建议

鉴于响应是XML,您是否建议:

  • 始终返回HTTP状态200,并使用一种“返回代码”方法将响应成功/失败嵌入XML中?e、 g.

  • 使用HTTP状态代码指示成功或失败


  • 这可能类似于。

    我认为您应该选择选项1,因为您的请求可能会成功,但在api的后端出现了一些失败。虽然我不会一直返回200的响应代码,但您可能会遇到这样的情况,即web服务的url不存在,在这种情况下,您希望返回相应的响应代码。

    只有在您的请求有效且响应有效时,Google和Amazon服务才会使用返回200

    例如,使用GoogleContactAPI

    • 如果您请求一个存在的联系人:联系人的200+XML/Json
    • 如果您请求的联系人不存在:404+Xml/Json和详细信息
    • 如果您的请求格式不正确:400+Xml/Json,包含详细信息
    • 如果尚未发送授权令牌:401+Xml/Json及详细信息
    • 如果您尝试使用Get或Put:405插入联系人
    • 如果您尝试使用Post:200插入联系人(假设请求内容有效)
    • 如果您尝试使用Get或Post:405更新联系人
    • 如果您尝试使用Put:200更新联系人(假设请求contant有效)
    • 如果您试图使用Get、Put、Post:405删除联系人
    • 如果您尝试使用Delete:200删除联系人(假设请求内容有效)
    我强烈建议您不要总是返回200。HTTP状态代码是围绕表示请求的响应代码结果设计的。如上所示,如果您的请求不正确,那么使用HTTP状态代码是一个有效的解决方案

    如果您这边有问题,我建议您使用5XX。我真希望谷歌能做到这一点。(有一次,他们实验性的OAuth 2.0端点不起作用,我没有抛出一个503服务不可用,而是收到一个400错误的请求,这让我觉得我做错了什么……)


    有关HTTP状态代码的描述,请查看。

    作为RESTful服务的忠实粉丝,我建议您始终使用适用的响应代码,并在响应内容中添加详细信息。是否有不使用代码的特殊原因?不,除了普遍无知和我自己使用其他类似服务的传统/经验之外,我想不出其他具体原因。在这种情况下,我绝对建议使用适用的响应代码,直到此类原因成为问题为止(例如,一个连接客户端错误地处理代码)。当我连接到一个违反HTTP标准的服务时,我很恼火。我曾经不得不通过发送重定向,然后返回一个200,其中页面内容只显示404,从而与一个表示“404”的服务集成。因此,该服务基本上说,“该资源已移到此处…此资源是正确的资源。但仍未找到。"对我来说毫无意义。如果我不是建议该服务是RESTful或REST兼容的,HTTP响应代码在我自己的应用程序级响应结构上会给我什么?您将按照预期使用它。我个人更希望看到HTTP响应。我的偏好是基于使用其他大型公司,这些公司同样的事情也是如此。因为许多编写web服务的人应该记住这一点,以备将来参考…以你的例子来说,web服务器不会处理一个不存在的URL 404响应吗?