【问题标题】:REST Web API - many-to-many relationshipREST Web API - 多对多关系
【发布时间】:2015-07-31 08:52:29
【问题描述】:

好的,我的last question 没有答案,所以我怀疑我走错了路。

我正在为移动应用程序开发一些 Web REST Api,关于 REST 最佳实践我不知道如何面对多对多关系。

我有两个表,Wallets 和 Cateories,在这些表之间存在多对多关系,因为一个类别可能与不同的钱包相关联,而一个钱包可能拥有不同的类别。

实际上,这个数据库被一个非休息网站使用:
当用户创建一个新类别时,他从他自己的钱包列表中选择要连接的钱包,并通过这个单一的 POST 调用类别已创建并连接到钱包。

我认为复制此行为不符合 REST 最佳实践。

我的第一个想法是用这种形式“暴露”类别和钱包之间的联系:

http://localhost:8000/categories/77/wallets/4

但我遇到了我在previous question 上写的问题,我认为这不是正确的方法。

任何人都有根据REST 最佳实践管理多对多关系的有效方法吗?

提前致谢。

【问题讨论】:

  • /categories/77/wallets/4 看起来还不错
  • @Tim:所以顺序是(1)询问用户钱包列表(2)单独创建类别和所选钱包之间的连接

标签: api rest


【解决方案1】:

按类别命名空间钱包很好,如 /categories/77/wallets/4。如果某个类别中只有钱包,您还可以考虑更简洁的方案,例如 /categories/77/4 或 /wallets/77/4。

但是,您不必命名空间。您的钱包可能有自己的 ID,因此您也可以将它们公开为 /wallets/4。

值得付出努力吗?如果您的 URL 也在公共网站上,我认为这是一个很好的做法(在这种情况下,您可能也希望支持 slug ID,例如 /categories/luxury/wallets/acme)。如果不是,您应该知道这将是服务器端的更多配置工作和客户端的更多工作(客户端必须知道 2 个 ID 而不是 1 个)。

【讨论】:

  • 在一个类别中也有子类别,所以我认为我不能做类似categories/77/4的事情。我的wallets,当然,有自己的 ID,我不知道如何简单地使用 /wallets/4 来在类别和钱包之间添加“连接”。我想我会一直让你传递类别 ID,不是吗?
  • 简单,只需在请求正文中传递类别 ID,就像传递任何其他数据一样。您可能还需要设置其他关联,因此钱包的类别不必有任何特别之处。然后,服务器将执行有关该类别是否存在以及是否允许钱包的常规验证。
猜你喜欢
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2018-06-11
  • 1970-01-01
相关资源
最近更新 更多