多对多资源映射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设计的主要内容,如果未能解决你的问题,请参考以下文章