在设计RESTful API时,是否应将依赖于其他资源的资源建模为子资源,还是应该简单地相互引用?
E.g。假设门总是依赖于房子那么
/house/73/door/1
或
/house/73
/door/1044
房屋和门是否包含彼此的引用?
我发现的大多数RESTful API都非常扁平,因此我会重视对任何具有更复杂关系依赖性的API的引用。
此致
答案 0 :(得分:13)
请记住,URI是服务器的实现细节。如果您可以将它们建模为平坦资源,那么就这样做。服务器处理它们会更容易。
如果门的标识符并非在所有房屋中都是唯一的,那么您的服务器将需要知道房屋,因此您需要将房屋包含在URI中。
资源之间的关系应该由返回的表示中的链接建模。即您的房屋代表应该包含该房屋所有门资源的链接。我建议尽量避免使用URL结构作为域名含义。
如果需要唯一标识资源,则仅使用层次结构。
答案 1 :(得分:13)
在UML术语中,如果关系是Aggregation的关系,那么你使用带有事物之间链接的平面层次结构,而如果关系是Composition的关系(即,door
的生命周期严格受限于使用子资源的house
)的生命周期。
我不是建议绘制UML图!但它确实有助于记住这种区别。 (您还可以通过将子资源重定向到真实的子资源来建模聚合案例;重定向 RESTful。OTOH,我实际上并不喜欢这样做;我更喜欢建立任何关系显式并保持重定向的数量。)