【发布时间】:2014-11-10 14:05:31
【问题描述】:
假设我有一个简单的 (Jersey) REST 资源,如下所示:
@Path("/foos")
public class MyRestlet
extends BaseRestlet
{
@GET
@Path("/{fooId}")
@Produces(MediaType.APPLICATION_XML)
public Response getFoo(@PathParam("fooId") final String fooId)
throws IOException, ParseException
{
final Foo foo = fooService.getFoo(fooId);
if (foo != null)
{
return Response.status(Response.Status.OK).entity(foo).build();
}
else
{
return Response.status(Response.Status.NOT_FOUND).build();
}
}
}
根据上面的代码,返回 NOT_FOUND 状态 (404) 是否正确,或者我应该返回 204 或其他更合适的代码?
【问题讨论】:
-
如果您希望资源在那里,因为它是使用 ID 查找的,那么应该是 404。出现问题,找不到您需要的资源。如果它是一个端点来获取昨天过期的产品列表(例如)但没有,那么 404 将不正确,因为您不能期望总是让产品每天都过期。因此,带有空数组的 200 可能会更好。
-
我个人更喜欢 204 - 过去,我实际上用对象 data:null, success: false, message: some message 做了 200,前端总是会返回相同的对象,但使用标记某事是否发生(带有消息)。但我来这里是为了找出最佳做法。