在RESTAPI调用中,如果结果为空,我们应该返回什么

在RESTAPI调用中,如果结果为空,我们应该返回什么,rest,api,httpresponse,Rest,Api,Httpresponse,我有两项服务- 1.客户服务 2.特色服务 客户端服务向功能服务请求与客户端对应的功能。如果在数据库中找不到客户端的功能,我们应该返回什么? 1.404未找到任何资源 2.204成功-无内容 3.200成功-{features:[]}//空列表HTTP响应应该是200,只需在标记中显示“空”结果您可以通过两种方式返回。如果没有内容,404无效 a) 204 No Content Explaination: The server has fulfilled the request but does

我有两项服务-
1.客户服务
2.特色服务

客户端服务向功能服务请求与客户端对应的功能。如果在数据库中找不到客户端的功能,我们应该返回什么?
1.404未找到任何资源
2.204成功-无内容

3.200成功-{features:[]}//空列表

HTTP响应应该是200,只需在标记中显示“空”结果

您可以通过两种方式返回。如果没有内容,404无效

a) 204 No Content
Explaination: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.


b) Return 200 and with empty body {};

你可以在w3上找到更多信息。实际上,我总是返回一个200的空列表。列表为空的事实告诉使用者,尽管请求没有问题,但没有与之关联的资源

204是200和404之间的一个公平折衷方案,但我认为它增加的价值最小


我个人不愿在返回列表的端点上抛出404,因为预计会出现列表为空的情况(这可能是一个过于宽泛的语句)。如果请求是因为与列表相关的资源而失败的话,那么我肯定会认为404有效(假设你有一个帽子列表的用户,而对于一个未找到的用户的帽子的请求)。

前导:这是一个约定,没有休息的警察检查你的反应。我的方法是404,如果你要求一个具体的功能(“获取功能/1”),或者200,如果你要求所有功能(“获取功能”),如果响应包含附加信息,204没有其他内容。这归结为设计选择。如果在没有可用功能的情况下被视为故障,则不应采用1,如果没有,则首选方案2和3。在reagards至No.3中,媒体类型应定义空结果集的外观。由于REST需要适当的缓存处理,所有3个选项在默认情况下都是可缓存的,因此实际上没有太大的区别——RFC7230-35背后的一位专家表示