Web services 在RESTful服务中使用http状态代码

Web services 在RESTful服务中使用http状态代码,web-services,rest,error-handling,architecture,Web Services,Rest,Error Handling,Architecture,我正在寻找一个很好的有意义的讨论,为什么人们觉得RESTfulWeb服务劫持HTTP响应代码并在给定API的上下文中为它们分配意义是个好主意。我的直觉反对它:它认为HTTP在这里充当传输层协议,为什么我要将我的API概念泄漏到传输层?是的,我知道HTTP是27层图中的应用层,但分层是相对的。对于我的API,HTTP是一种传输。 现在人们说,否则错误处理就无法标准化。但REST也没有真正标准化它。401和404消息的直观性让我们感觉良好,但仅此而已。它真正的作用是更难区分API错误和API服务器不

我正在寻找一个很好的有意义的讨论,为什么人们觉得RESTfulWeb服务劫持HTTP响应代码并在给定API的上下文中为它们分配意义是个好主意。我的直觉反对它:它认为HTTP在这里充当传输层协议,为什么我要将我的API概念泄漏到传输层?是的,我知道HTTP是27层图中的应用层,但分层是相对的。对于我的API,HTTP是一种传输。

现在人们说,否则错误处理就无法标准化。但REST也没有真正标准化它。401和404消息的直观性让我们感觉良好,但仅此而已。它真正的作用是更难区分API错误和API服务器不存在/客户端未指向正确位置等情况。

您认为哪种情况会带来更好的结果:

  • 对API层重新使用HTTP状态代码,如200-OK、404 Not found、500 Error等,意味着类似的响应,这些响应通常保证以标准方式在所有RESTful API供应商中使用

  • API供应商返回200-OK,消息正文包含自定义响应信封或正文,表示类似的内容(如未找到和错误)

第一个场景还允许开发标准库来与这些API通信,第二个场景意味着每个API都是唯一的案例,以及错误处理、缓存、,etc不能以标准的方式完成。

我无法想象与多个不同API对话的标准库,在这里,您不需要查看响应主体,并且对http状态代码完全满意。缓存当然是一个有效的点,但是可以或多或少地用响应头来处理。对于web客户端,在大多数封装XmlHttpRequest(Ajax)的JavaScript库中,例如Promises,它们使用HHTP状态代码来解释一般的成功、失败情况(例如200x表示成功)这使得API消费者的生活作为一个标准变得更简单。听起来像是为了使其中一个用例更简单而牺牲了正确性。