2017-06-07 82 views
1

想象一下,我们有一个叫做/guest/{guestId}的端点。这个端点有一个GET功能,如果你提供了一个guestId它将返回一个包含所有客人信息的对象。对于格式错误的URI api请求,HTTP 400 vs HTTP 404

的问题是,应该怎样在这些场景被退回 -

guestId = “” 通往/guest/
guestId = “invalidId” 导致/guest/invalidId

的HTTP 1.1文件似乎留有余地在传递无效ID时打开,但在guestId为空时显示404。对于无效的ID,它在技术上击中端点,但只是给它指向400的畸形语法,但同时向服务器提供指向404的无效URI。

什么是事实而非意见 - 基本正确?

+0

可能的重复[应该RESTful API返回400或404时传递一个无效的id](https://stackoverflow.com/questions/25378624/should-a-restful-api-return-400-or-404- when-passed-an-invalid-id) – Abhijeet

回答

3

这里没有解释的余地​​。 /guest/invalidId的资源不存在,应该返回404。

请求本身并不是真的'格式错误',它只是使用指向不存在的资源的URI。它的格式不正确,也许从你的特定应用程序的角度来看(它不是一个有效的ID),但它不是从HTTP协议的角度来看的。

一般情况下,这可能有所帮助:

当你想发出错误到客户端,客户端负责。你会想在400-499范围内发出一个错误。如果你找不到一个很好的具体错误来满足你的具体错误条件,那么你才会真的想使用400,因为在实践中,当没有别的东西真的适合时,它就被用作状态码。

+1

不错,那清除了一切。非常感谢您的回答! – user2824512