REST API 404:错误的URI或缺少资源?

我正在构建一个REST API,但我遇到了一个问题。

看来在设计REST API方面被接受的做法是,如果请求的资源不存在,则返回404。

但是,对我而言,这增加了不必要的含糊。 HTTP 404传统上与一个错误的URI相关联。 所以实际上我们会说:“要么你到了正确的地方,但是这个特定的记录不存在, 或者互联网上没有这样的位置!我真的不确定哪一个......”

考虑以下URI:
http://mywebsite/api/user/13

如果我得到404回来,是因为用户13不存在? 或者是因为我的网址应该是:
http://mywebsite/restapi/user/13

在过去,如果记录不存在,我刚刚返回了带有HTTP 200 OK响应代码的NULL结果。 这很简单,在我看来很干净,即使它不一定被接受的做法。 但有没有更好的方法来做到这一点?


404只是HTTP响应代码。 最重要的是,您可以为响应正文和/或其他标题提供开发人员将看到的更有意义的错误消息。


如果资源不存在,请使用404 不要空着身体返回200

这类似于编程中undefined vs空字符串(例如"" )。 虽然非常相似,但确实有区别。

404意味着该URI没有任何内容(例如编程中未定义的变量)。 用一个空的体返回200意味着在那里存在某些东西,并且现在只是空的(就像编程中的空字符串)。

404并不意味着它是一个“坏URI”。 有一些特殊的HTTP代码用于URI错误(例如414 Request-URI Too Long )。


与大多数事情一样,“取决于”。 但对我来说,你的做法并不差,并不违背HTTP规范本身。 但是,让我们澄清一些事情。

首先,URI应该是不透明的。 即使它们对人不透明,它们对机器也是不透明的。 换句话说, http://mywebsite/api/user/13http://mywebsite/restapi/user/13之间的区别与http://mywebsite/api/user/13http://mywebsite/api/user/14之间的区别相同http://mywebsite/api/user/14即不一样的时期不一样。 因此,404将完全适用于http://mywebsite/api/user/14 (如果没有这样的用户),但不一定是唯一适当的响应。

您也可以返回一个空的200响应或更明确地返回204(无内容)响应。 这会向客户传达其他的东西。 这意味着由http://mywebsite/api/user/14标识的资源没有内容或基本上没有任何内容。 这确实意味着有这样的资源。 但是,这并不一定意味着您声称有一些用户在ID为14的数据存储中持久存在。这是您的私人关注点,而不是客户提出请求的问题。 因此,如果以这种方式为资源建模是有意义的,请继续。

有一些安全隐患会给你的客户提供信息,使他们更容易猜出合法的URI。 在未命中时返回200而不是404可能会给客户一个线索,即至少http://mywebsite/api/user部分是正确的。 恶意客户可能会继续尝试不同的整数。 但对我来说,恶意客户端无论如何都可以猜测http://mywebsite/api/user部分。 更好的补救措施是使用UUID。 即http://mywebsite/api/user/3dd5b770-79ea-11e1-b0c4-0800200c9a66http://mywebsite/api/user/14更好。 这样做,你可以使用你的技术返回200的没有太多的东西。

链接地址: http://www.djcxy.com/p/71373.html

上一篇: REST API 404: Bad URI, or Missing Resource?

下一篇: Are there any naming convention guidelines for REST APIs?