2010-08-11 75 views
2

我正在开发一个RESTful API。其中一个URL允许呼叫者通过ID请求特定人员的记录。处理缺失数据的RESTful方式

那个ID的记录返回的常规值不存在是什么?服务器应该发回一个空对象还是404或其他东西?

谢谢。

回答

1

404,或者如果之前有410(去过)(但在这种情况下404也没有错)。

与REST一样,最好还是发送一个表示(即使是4xx代码),告诉客户端该资源不存在,并告诉它可以采取哪些措施。

2

一般而言,在这些情况下,我会根据CodeIgniter Rest Server使用的约定从我的RESTful API中返回404错误。

这在大部分情况下都能正常工作,并且是最“正确”和“纯粹”的解决方案。但是,404错误可能会使处理客户端上的这些“缺失”情况变得更困难,因为您可能需要一个单独的错误处理程序,而不是仅仅不做任何事情,因为您收回了一个空对象。

我会建议衡量这两种方法的亲和度,并实施最适合你的方法。

+0

客户端如何区分不存在的URL路径和不存在的记录? – Ralph 2010-08-12 13:46:26

+0

既不存在,也没有区别。不过,我非常喜欢@布鲁诺提出的用404代码发送表示的建议 - 这可以用来做出这样的区分。 – 2010-08-12 17:00:03

0

除了考虑404之外,我会考虑返回“空白”的某种表示形式的可能性:考虑谷歌搜索词klinjeraliknoplidocus。在撰写本文时,它会返回200 OK并显示“不匹配”,并且建议无法继续前进。它不返回404,因为URI http://www.google.com/search?q=klinjeraliknoplidocus实际上标识了一些内容,即“Google所知的所有与术语klinjeraliknoplidocus相关的文档”。很快,这个页面就会出现在那里。

所以:

  • 如果您定义查找功能为返回零个或多个项目与此ID,然后在200和空响应有意义。
  • 如果您将查找功能定义为完全返回一个项目,则404(或410)是有意义的。
+0

400(错误请求)如何?这样我可以区分误输入的URL(400)和不存在的ID。 – Ralph 2010-08-11 22:08:13

+0

我认为错误的请求应该保留用于语法错误。标识垃圾的URI在语法上不正确。格式不正确的标题(例如,'If-None-Match:abc'缺少ETag周围的引号)格式不正确;在PUT或POST中有语法错误的XML文档在语法上不正确,两者都可能导致400s。为/ customers做一个GET?q = 12345或/ customer/id/12345本身在语法上不是不正确的。如果客户ID不存在,取决于资源定义的性质,应使用200或404。 – mogsie 2010-08-12 10:24:05