对请求的响应应该是什么
http://localhost:8080/users/1,2,3
当系统没有ID为3的用户时<?p>
当所有用户都在场时,我返回一个200
响应代码,其中包含响应正文中的所有用户对象。当用户请求一个缺少的用户时,我返回404
并在正文中显示错误消息。
但是,有效ID和缺失ID之间混合的正文和状态代码应该是什么?
答案 0 :(得分:1)
我假设您要遵循REST API原则。为了保持清晰的api设计,你应该使用查询字符串进行过滤
http://localhost:8080/users?id=1,2,3
然后你不会有这样的困境 - 你只能返回id包含在提供的值列表和200状态代码中的用户(即使列表为空)。一般来说这个端点
http://localhost:8080/users/{id}
应保留用于通过提供主键来请求单个资源(用户)。
答案 1 :(得分:0)
您要求的是集合。请求基本上是:&#34;给我ID为{1,2,3}的所有用户。&#34;这些用户的一个子集(让我们说没有用户但ID为3)仍然是一个成功的操作,这需要200 (OK)。
如果您对此过于担心,仍然可以通过303 (See Other)将客户端重定向到没有违规元素的资源表示。
如果所有ID都无效,事情会变得有点棘手。人们可能只想简单地返回404 (Not Found),但严格来说这是不正确的:
404状态代码表示源服务器未找到目标资源的当前表示
确实,有一个:空集。从程序的角度来看,返回它可能确实更容易,而不是抛出错误。这依赖于客户能够处理空集/文档。
RFC允许您自由选择:
[...]原始服务器没有找到目标资源的当前表示,或不愿意透露存在。
因此,如果您希望隐藏空集的存在,那就没关系。值得一提的是,一个包含任何东西的集合本身并不是什么;)
答案 2 :(得分:0)
我建议不要首先提供该方法,而是强迫API的用户发出三个单独的请求并返回明确的响应(用户1和2的两个200
和{{1}用户3)。此外,API可以提供一个get方法,响应所有可用的用户ID等(取决于您的系统)。
或者,如果这不是一个选项,我想,你有两个选择:
404
,在我看来技术上更准确。我的意思是,请求是 1,2和3 ,但未找到。404
,并返回null,这可能对您的方案最有用。