HTTP Web服务和HTTP响应代码

时间:2011-12-15 19:59:59

标签: .net web-services http

我正在编写一个Plain Old XML HTTP请求/响应服务,正在寻找有关如何响应调用者的建议。

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

  1. 一直返回HTTP状态200,并使用一种“返回代码”方法将响应成功/失败嵌入到XML中?例如<myResponse><returnCode></returnCode><myPayload/></myResponse>

  2. 使用HTTP状态代码表示成功或失败。

  3. 这可能类似于this question

2 个答案:

答案 0 :(得分:1)

只有在您的请求有效并且回复有效时,Google和亚马逊服务才会使用返回200。

例如,使用Google Contact API

  • 如果您请求存在的联系人:200 + XML / Json of Contact
  • 如果您请求不存在的联系人:404 + Xml / Json with Details
  • 如果您的请求格式不正确:400 + Xml / Json with Details
  • 如果您尚未发送授权令牌:401 + Xml / Json with Details
  • 如果您尝试使用Get或Put:405
  • 插入联系人
  • 如果您尝试使用Post:200(假设请求有效)
  • 来插入联系人
  • 如果您尝试使用Get或Post更新联系人:405
  • 如果您尝试使用Put:200更新联系人(假设请求有效)
  • 如果您尝试使用Get,Put,Post:405
  • 删除联系人
  • 如果您尝试使用Delete:200删除联系人(假设请求有效)

我强烈建议您不要总是返回200. HTTP状态代码是围绕代表请求的响应代码结果设计的。如上所示,如果您的请求不正确,那么使用HTTP状态代码是一种有效的解决方案。

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

有关HTTP状态代码的说明,请查看RFC2616

答案 1 :(得分:0)

我认为你想要使用选项1,因为你的请求可能会成功但是api中的后端会出现问题。我不会一直返回200的响应代码,但是你可能会遇到这样一种情况,即Web服务的url不存在,在这种情况下你需要返回相应的响应代码。

相关问题