多对多资源映射restful api设计

Posted

技术标签:

【中文标题】多对多资源映射restful api设计【英文标题】:Many to many resource mapping restful api design 【发布时间】:2020-05-30 00:43:02 【问题描述】:

这里还有许多其他问题针对同一问题many-to-many relationship url design for restful apis。我有一些相同的,但它与其他不同。我找不到任何更好的方法。 我有locations 资源和services 资源`

GET /services                           //it should give you all services
GET /locations                          //it should give you all locations
GET /locations/:id/services             //it should give you all services offered by a location

我遇到的问题是我必须设计一条路线,以提供所有位置以及它们提供的服务 我浏览了reddit 上的一篇帖子,建议。GET /locations?include=services 我还经历了另一个 doc 。它建议。GET /locations-services 我相信我不是第一个遇到这种困惑的人。请帮忙,如果可能的话,分享一些资源,我可以通过这些资源来消除我的疑虑。

【问题讨论】:

我认为 REST 不考虑预加载。这在图服务中更为典型。我会选择GET /locations?include=services,因为它可以扩展。也许将来你会需要更多热切的资源:@​​987654330@ 什么是做同样的宁静的方式。还有其他方法吗?问题是我这种方法。我必须做很多 if 和代码重复,以便根据传递的包含进行预加载。 expressjs 对 /locations/locations?include=service/locations?include=services&population 的处理方式不同吗? 没有。它将执行相同的路线。您只需访问查询字符串并在一个地方检查它们。 【参考方案1】:

您可以使用任何您想要的拼写。您应该选择与您用于其他标识符的拼写一致的拼写,原因与我们选择与其他局部变量名称一致的变量名称拼写相同。

但是

/a1dadfcb-8fc6-4456-b05e-a0b91575e0ef

是一个完全令人满意的 URI。

/locations?include=services
/locations?services
/locations-services
/locations/services
/service-directory

这些都很好。通用组件无所谓,只要你使用符合RFC 3986定义的生产规则的拼写即可

【讨论】:

我会选择/locations?include=services 更有意义,并且正如@Rashomon 建议的那样,如果需要,我可以做更多包含。

以上是关于多对多资源映射restful api设计的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RESTful API 中处理多对多关系?

[Design]-API设计指南

多维数据集设计 - 带有附加列的多对多映射的桥接表

API设计RESTful API 设计指南

REST api:在一次获取中请求多个资源[重复]

在restful api 设计中,如果要获得一个资源,一定要用GET方法么