gpt4 book ai didi

rest - 找不到 REST 资源时返回 404 是否正确?

转载 作者:IT老高 更新时间:2023-10-28 20:59:51 30 4
gpt4 key购买 nike

假设我有一个简单的 (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,或者其他更合适的代码?

最佳答案

在这种情况下,404 响应非常典型,API 用户很容易使用。

一个问题是,客户端很难判断他们是否收到了 404,原因是未找到特定实体,还是由于 URI 中的结构问题。在您的示例中, /foos/5 可能会返回 404,因为 id=5 的 foo 不存在。然而,即使 id=1 的 foo 存在,/food/1 也会返回 404(因为 foos 拼写错误)。换句话说,404 意味着要么是构造错误的 URI,要么是对不存在的资源的引用。

当您有一个引用多个资源的 URI 时,会出现另一个问题。通过简单的 404 响应,客户端不知道哪个引用的资源没有找到。

这两个问题都可以通过在响应正文中返回额外信息来部分缓解,让调用者确切知道没有找到什么。

关于rest - 找不到 REST 资源时返回 404 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845631/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com