关系多对一的最佳URL结构

时间:2016-10-29 19:04:16

标签: java spring-boot jhipster spring-restcontroller

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

我有以下服务:

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

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

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

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

我不知道这个网址是否是最佳结构以及此类搜索。我知道你可以在桌子上搜索你做过滤器的特定字段,但是我测试了,我无法获得关系字段。

2 个答案:

答案 0 :(得分:3)

我想就如何构建您的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,它可以获取该市场中的所有产品。

答案 1 :(得分:2)

通常,您希望您的网址具有语义和可导航性。所以基于你已经得到的东西:

/api/market/:marketId/product

此外,通常建议使用复数,因此我会执行以下操作:

/api/markets/:marketId/products