假设我有一个资源Person
,而在一个人身上我有一个嵌套的资源SomeResource
。在以下情况下应该返回哪个状态码以及为什么?
/Person/1/SomeResource (SomeResource does not exist)
/Person/1/SomeResource (Person does not exist)
我认为在这两种情况下都应该使用 404,但不是每个人都同意,我想知道为什么。您可能会争辩说这Person
是基础资源,SomeResource
只是该资源的“属性”,SomeResource
因此在第一种情况下的请求应该不返回任何内容,但在第二种情况下返回 404。我认为这可能是一个选择,但我仍然更喜欢 404。我根本不喜欢的另一种情况是返回 500 并带有错误描述,这也是我在讨论中听到的另一种选择,但这会迫使消费者针对我不喜欢的异常进行编程。500 对我来说意味着出了点问题,你真的无能为力。
问题是争论是你不知道为什么你得到一个 404 如果你得到它,是因为Person
不存在还是因为SomeResource
不存在。
更新1:
也许我应该突破SomeResource
到一个单独的资源,比如
/SomeResource/1
它返回类似的响应{data: {the data}, person: {person data}}
,并且仅在两者都丢失时返回 404,但如果数据丢失,则返回 200 并返回空数据。
更新 2:
我想我知道要使用哪个状态码,当这个人不存在时它是 400,因为我当时认为这是一个你不应该做的请求,也就是说,一个错误的请求。什么时候SomeResource
丢失,我会选择 404,因为它Person
确实存在,但嵌套资源丢失了。