gpt4 book ai didi

http - RESTfully 实现包含元的多对​​多关系的最佳方式是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:27:04 24 4
gpt4 key购买 nike

当通过 RESTful 接口(interface)表示数据模型时,可以理解为创建与对象类型/对象组相关联的顶级端点:

  • /用户
  • /汽车

我们可以重新使用 HTTP 动词来启用对这些组的操作(GET 列出,POST 创建等)。当表示具有“依赖性”的模型时(因为没有“父级”就无法存在),我们可以创建更深层次的端点来表示该依赖关系:

  • /users/[:id]/tokens

在这种情况下,没有 /tokens 的顶级端点是有意义的,因为它们不应该在没有用户的情况下存在。

多对多关系变得有点棘手。如果两个模型可以具有多对多关系,但也可以真正独立存在,那么为两个对象提供一个顶级端点和一个更深层次的端点来定义该关系是有意义的:

  • /用户
  • /汽车
  • /用户/[:id]/汽车
  • /汽车/[:id]/用户

然后我们可以使用 PUTDELETE 方法通过 HTTP 接口(interface)定义这些关系:PUT/users/[:user_id]/cars/[: car_id]。运行该 PUT 操作会创建一个以某种方式链接两个对象的数据模型(就像关系数据库中的连接表)。


然后,棘手的部分就变成了决定在何处限制接口(interface)以对抗冗余。

您是否允许对二级深度端点 (GET/users/[:user_id]/cars/[:car_id]) 的 GET 请求?还是您需要他们从顶级 GET/cars/[:id] 访问“汽车”?

现在,如果多对多关系包含元信息怎么办?你如何表示它,你在哪里返回它?

例如,如果我们想跟踪用户驾驶某辆汽车的次数怎么办?我们会在哪里返回这些信息?如果我们在嵌套端点返回它,如果我们返回元信息而不是资源,我们是否违反了 REST 或不一致?我们是否通过某种属性将元信息嵌入到请求的资源中?

请指教。 :P(但真的,谢谢)

最佳答案

恕我直言,这更像是个人设计偏好。

我个人会选择停在/users/[:user_id]/cars/,然后要求调用/cars/[:car_id] 以获取汽车信息。

不过,如果您要包含特定于关系的元数据,例如“用户驾驶某辆车多少次?”将它保持在更深层次的关系下是有意义的,比如/users/[:user_id]/cars/[:car_id]。

说实话,这不是一门精确的科学。您必须为您的数据模型做最简单、最具表现力但仍然足够强大的事情。

关于http - RESTfully 实现包含元的多对​​多关系的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22046536/

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