gpt4 book ai didi

web-services - 多个依赖资源的 REST 式 URI 设计

转载 作者:行者123 更新时间:2023-12-03 09:23:58 26 4
gpt4 key购买 nike

我正在尝试设计一个基于 REST 的 Web 服务来与我正在开发的农场动物管理系统进行交互。

为了详细说明问题,我收藏了动物 属于一个农场。每只动物都有自己的信息——例如姓名、身份证号、品种年龄等。因此,我假设以下 URI 适合:

/animals               <- retrieve list of animals
/animals/{animal-id} <- Retrieve only one animal
/animals?breed=sheep <- Search/query

当我尝试将其他相关资源链接到每个动物时,问题就出现了。一种动物 可以 收集体重信息,以及我所说的评论(对特定动物的观察)。这些中的每一个都是依赖的,并且只存在于那个特定的动物,但它们本身就是我想要访问的资源。

IMO 最简单的方法是将资源嵌套在动物 URI 中:
/animals/{animal-id}/weights
/animals/{animal-id}/comments

但是,我认为需要直接访问和查询权重和评论,而无需引用动物。使用示例是从特定品种的所有动物中检索最近(或所有)体重 ...?breed=sheep甚至返回重量/评论选择个别动物 ID 的 ...?animals={ID1},{ID2},{...} .

当我想一次向多只动物添加一条评论时,会出现进一步的复杂情况。 (请原谅我对 POST 和 JSON 的表示)
POST ....
{
"comment":"Animal moved to paddock B",
"animals":[{id1}, {id2}, ...]
}

我知道这个问题的明显解决方案是 GET 和 POST(例如)到 每个我想检索/编辑的动物。不过,我不希望这样做,因为最终我希望从移动设备访问此服务,因此减少调用数量似乎是明智的。

我相信网络标准允许在 URI 中使用 CSV,所以这样的事情可以工作,
/animals/{id1},{id2},{..}/weights

但是,我期待可能需要一次引用(或查询)十个动物的情况,这会导致 URI 困惑且不友好。

我目前认为的解决方案是将权重和评论作为自己的资源公开,这样我就可以直接访问和查询它们
/weights
/weights/{weight-id}
/weights?breed=sheep

甚至直接发布到集合
POST /comments
{
"comment":"Animal moved to paddock B",
"animals":[{id1}, {id2}, ...]
}

但是会怎样 /animals/{animal-id}/weights返回?甚至需要它,或者我只是引用指向 /weights?animal={animal-id} 的链接资源本身?但是可以链接到查询的资源吗?

我是在做一个多余的,还是只是提供“另一种”访问信息的方式?

是不是我做错了什么,是我让我的数据库影响了我的服务模型,还是我完全没有捕获重点?

我对此很陌生,并且已经阅读了很多关于这些问题的相互矛盾的论点,因此对于什么最适合我的要求感到非常困惑。

谢谢!

最佳答案

如果您想这样处理它们,最好为您的其他实体定义顶级资源( /weights/comments 等)。然后,您可以批量发布到这些端点。

POST /comments

{
"animals" : [
{"id" : 1},
{"id" : 2},
{"id" : 3},
{"id" : 4},
],
"commentText" : "Sent to Hamburger Hamlet"
}

请注意,在您的 URL 中包含一长串 id 并不是一个好的设计,原因有几个,包括大多数浏览器和 HTML 代理对 URL 长度有限制(好的经验法则是尝试将 URL 长度保持在 2083 个字符或更少)。

关于web-services - 多个依赖资源的 REST 式 URI 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831465/

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