RESTful处理丢失数据的方法

RESTful处理丢失数据的方法,rest,Rest,我正在开发一个RESTful API。其中一个URL允许调用方通过id请求特定人员的记录 对于不存在的id,返回记录的常规值是多少?服务器是否应该发回一个空对象,或者可能是一个404,或者其他什么 谢谢。404,或者如果它以前在那里,可能是410(不见了)(但404在这种情况下也没有错) 与REST一样,最好发送一个表示(即使使用4xx代码),告诉客户机资源不存在,并告诉客户机可以从那里采取哪些操作。通常,在这些情况下,我会根据使用的约定从RESTful API返回404错误 这在大多数情况下都

我正在开发一个RESTful API。其中一个URL允许调用方通过id请求特定人员的记录

对于不存在的id,返回记录的常规值是多少?服务器是否应该发回一个空对象,或者可能是一个404,或者其他什么

谢谢。

404,或者如果它以前在那里,可能是410(不见了)(但404在这种情况下也没有错)


与REST一样,最好发送一个表示(即使使用4xx代码),告诉客户机资源不存在,并告诉客户机可以从那里采取哪些操作。

通常,在这些情况下,我会根据使用的约定从RESTful API返回404错误

这在大多数情况下都很好,是最“正确”和“纯粹”的解决方案。然而,404错误会使在客户端处理那些“丢失”的情况变得有点困难,因为您可能需要一个单独的错误处理程序,而不是因为返回了一个空对象而什么都不做


我建议权衡这两种方法的Pro和Con,并实施对你来说最有意义的方法。

< P>除了考虑404之外,我还考虑返回“空”的一些表示的可能性:考虑一个谷歌搜索这个词。在撰写本文时,它返回200 OK,其中包含“无匹配项”和如何前进的建议。它不返回404,因为URI
http://www.google.com/search?q=klinjeraliknoplidocus
实际上标识了一些东西,即“谷歌已知的所有与术语Klinjeralikonoplidocus相关的文档”。很快,这个页面就会出现在那里

因此:

  • 如果您将查找功能定义为返回零个或多个具有此ID的项,那么200和空响应是有意义的
  • 如果将查找功能定义为只返回一个项目,那么404(或410)是有意义的

400(错误请求)怎么样?这样我就可以区分错误输入的URL(400)和不存在的id。我认为错误请求应该保留为语法错误。标识垃圾的URI在语法上并不错误。格式不正确的标题(例如,如果不匹配,则为
:abc
缺少ETag周围的引号)格式不正确;PUT或POST中出现语法错误的XML文档在语法上不正确,两者都可能导致400s。为/customers执行GET?q=12345或/customer/id/12345本身在语法上并不错误。如果客户ID不存在,则应使用200或404,具体取决于资源定义的性质。客户端如何区分不存在的URL路径和不存在的记录?由于两者都不存在,因此没有区别。然而,我非常喜欢@Bruno的建议,即发送一个带有404代码的表示——这可以用来做出这样的区分。