【问题标题】:API route to a Many-To-Many relationship多对多关系的 API 路由
【发布时间】:2018-05-13 03:59:18
【问题描述】:

我有一个相关的 REST API 问题。

我有 2 个实体,ProductStore,它们之间有 many-to-many 关系。 Product 可能有 0 个或多个 Stores 可用,Store 可能有 0 个或多个 Products。

但我需要一条将Product 添加到Store 的路线,还需要一条从Store 中删除Product 的路线。关系很简单,数据透视表中没有多余的列。

您会使用哪种方法?

【问题讨论】:

  • 如果您觉得有用并回答了您的问题,请接受我的回答:)

标签: php laravel rest api


【解决方案1】:

如果您的产品在没有 Store 的情况下无法存在并且必须属于 Store,那么将路由嵌套在 Stores 下是有意义的。

例如:

将新产品添加到商店

POST /api/store/:id/product/:id

从商店中删除产品

DELETE /api/store/:id/product/:id

无论哪种方式,在 Store 下嵌套用于向商店添加/删除产品的 API 路由似乎仍然更合乎逻辑。使用这种设计,商店是主要焦点,您可以从中添加或删除产品。它简单易懂,易于理解和遵循。

而在替代设计中,产品是主要焦点,您正在添加正在销售产品的商店或删除不再销售产品的商店。这变得比必要的复杂。

【讨论】:

  • 对不起,我的错。产品可以在没有商店的情况下存在。不会显示。
  • 无论哪种方式,在 Store 下嵌套用于向商店添加/删除产品的 API 路由似乎仍然更合乎逻辑。使用这种设计,商店是主要焦点,您可以从中添加或删除产品。它简单易懂,易于理解和遵循。而在替代设计中,产品是主要焦点,您正在添加正在销售产品的商店或删除不再销售产品的商店。这变得更加复杂。
  • 我想像PUT /api/store/{id}/product/{id} 将产品链接添加到商店 - 和DELETE /api/store/{id}/product/{id} 取消链接。所以我可以拥有Store\ProductController@updateStore\ProductController@destroy
  • 我编辑了我之前的评论以给出更全面的解释。是的,这听起来是正确的,但您的意思是 POST 来创建或添加新产品到商店而不是 PUT?
  • 是的,POST 而不是 PUT。
【解决方案2】:

如果您为 Product 公司工作,并且您正在跟踪哪些商店销售哪些产品,那么您将 POST 到 /api/product/{id} 以添加商店。

如果您为 Store 公司工作,该公司决定在哪些商店中携带哪些产品,那么您将 POST 到 /api/store/{id} 以添加产品。

请注意,我建议使用 POST,因为这两个操作实际上都不是创建产品或商店。

【讨论】:

  • 如果一家商店有很多顾客并且顾客可以访问许多商店? /api/store/{id} "POST" 方法应该捕获什么?添加产品或客户?这条路线似乎不太清楚
【解决方案3】:

您只需在您的产品商店方法中定义您保存的产品属于所选商店。

看看 Laravel documentation

【讨论】:

  • 是的。我知道这是如何工作的,但我不是在谈论这个。我想要一条将产品添加到商店的路线,例如 PUT api/product/{id}/store/{id} 没有有效负载,这可以是一种选择。
猜你喜欢
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-24
  • 1970-01-01
  • 2019-02-08
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多