gpt4 book ai didi

rest - 找不到时如何处理 Web API ("REST") 中的嵌套资源?

转载 作者:行者123 更新时间:2023-12-01 05:30:31 25 4
gpt4 key购买 nike

假设我有一个资源 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确实存在,但缺少嵌套资源。

最佳答案

记住给定的 URI 旨在识别单个“资源”可能会有所帮助。从语义上讲,URI 结构不支持“嵌套”资源的概念。看来你有两个资源:Person & SomeResource在您的场景中 SomeResourcePerson 有某种关系.您可以尝试使用这样的结构来表示这种关系:

GET /person/1

{
name: "Some Value",
someResource: {
"Href": "http://yourSite.com/someresource/123",
"Title": "Get some resource for this specific person"
},

// other key/value pairs as appropriate...
}

这样您就不会因应用程序特定的含义而使 400 和 404 过载。如果客户端收到了有效的 Person 结果,它会简单地调用 SomeResource href 并会收到适当的 404 或不取决于 SomeResource 123现存的。如果 Person URI 不存在,调用它会适本地返回 404,因为它不存在。

关于rest - 找不到时如何处理 Web API ("REST") 中的嵌套资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11430778/

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