2017-07-17 32 views
1

我有一个搜索的REST端点。没有结果的REST搜索的HTTP状态码

GET /person?firstname=john&name=smith

至于导致与HTTP状态代码200 OK集合返回:

[ 
    { 
     "id":11, 
     "firstname":"John", 
     "name":"Smith", 
     "birthday":"1996-03-08" 
    }, 
    { 
     "id":18, 
     "firstname":"John", 
     "name":"Smith", 
     "birthday":"1963-07-11" 
    } 
] 

什么是对空搜索结果正确的HTTP状态代码和有效载荷?

  • HTTP状态200 OK与空收集[]

  • HTTP状态204 No Content与空收集[]

  • HTTP状态204 No Content用空体

+0

我建议200因为一个空的列表或项目列表是真的是一回事,一个只是一个特例。另外204意味着根本没有内容,而“[]”仍然是一些内容。 –

+0

[HTTP 200或404 for empty list?]的可能重复?(https://stackoverflow.com/questions/30217761/http-200-or-404-for-empty-list) – CodeCaster

+0

https://stackoverflow.com/问题/ 13366730 /适当的休息响应为空表,等等 – CodeCaster

回答

2

我会建议:

HTTP Status 200 OK with a empty collection [] 

的原因是,204表示没有内容发送回,这是不是你打电话的结果是什么。

在你的情况下,有东西要发回。这是一个Json结果,恰好由一个空集合组成。

UPDATE:

从HTTP协议定义:

10.2.5 204无内容:服务器已完成要求,但并没有 需要返回一个实体主体,和可能想要返回更新的 元信息。

和:

204响应必须不包括消息正文,因而总是 由报头字段之后的第一空行终止。

+0

_“没有更多内容”_ - 需要引用。 – CodeCaster

+0

@CodeCaster:我添加了相关的段落。 – JuanR

+0

这并不是说204表示_no more_内容。 – CodeCaster

3

国际海事组织第一种情况:用空的收集[]

  • HTTP状态200 OK然后,你不必检查的204和使用什么返回,这是一个空列表。

+1

你打我吧=)你的搜索没有找到匹配的结果,但你仍然可以把结果看作是事实上匹配的结果。 – Justin

1

这是习惯问题在这里,当你设计你的Web应用程序。 200空的收集确定将是我的路要走。因为:

  • 它证明了你的API不会返回响应
  • 处理200将是对客户端更容易,因为我可以假设你正在使用Javascript,而其他响应代码可能会引发你的错误工作