【问题标题】:Best URL structure for relation many-to-one多对一关系的最佳 URL 结构
【发布时间】:2016-10-29 19:04:16
【问题描述】:

我正在使用 Spring Boot(由 JHipster 生成)。

我有以下服务:

/api/market/
/api/market/:id

/api/product/
/api/product/:id

所有使用 GET、PUT、POST 和 DELETE 的人。但我需要实现一项更具体的服务。

此服务应退回市场内的所有产品X。但要做到这一点,我想在这个调用中传递 URL 路径:/api/product?marketID=1,但我必须在市场表中进行选择,然后获取产品(@987654325 只在一个表中搜索会更容易@字段)。

我不知道这个 URL 是否是最好的结构以及这种搜索。我知道您可以在执行过滤器时搜索表上的特定字段,但我进行了测试,但无法获得关系字段。

【问题讨论】:

    标签: java spring-boot jhipster spring-restcontroller


    【解决方案1】:

    我想就如何构建您的 API 提出建议,然后为您的问题提供可能的答案。

    通常,RESTful API 遵循复数单数原则:给定所有市场(复数部分),找到 id 为 5231422(单数部分)的市场。使用/api/{plural-noun}/{singular-identifier} 在您的网址中反映这一点。所以你的 API 最终会看起来更像这样:

    /api/products  (all products in the system)
    /api/products/:productId  (a single product in the system)
    /api/markets  (all markets in the system)
    /api/markets/:marketId  (a single market in the system)
    

    要回答您的问题,那么:我建议您使用“俄罗斯堆叠娃娃”网址设计。您的设计似乎表明一个市场可以包含多个产品。因此,您可能会发现这种 URL 更清晰一些:/api/markets/:marketId/products,它会获取该市场内的所有产品。

    【讨论】:

    • 感谢您的回答!你和@Gregg 是对的。但我只有一个问题,我必须选择进入市场然后选择进入产品?或者有办法过滤到 Products 上的 market_id 列?
    • 您的产品是否有market_id 列?如果是这样,只需在 URL 中查询 market_id 等于 marketId 的所有产品。如果 Products 没有 market_id 列,您可能需要创建一种将产品与市场相关联的方法。
    • 我不得不做两个“选择”,因为我使用的是弹簧,所以我不得不做Market market = marketService.findOne(id); 然后productService.findByMarket(market);,我试图避免这种情况,但我认为没有其他方式
    【解决方案2】:

    通常,您希望您的 URL 具有语义和可导航性。所以根据你已经得到的:

    /api/market/:marketId/product

    此外,通常建议使用复数形式,所以我会这样做:

    /api/markets/:marketId/products

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      相关资源
      最近更新 更多