使用RESTful API建模资源关系

时间:2010-09-24 10:37:42

标签: rest

在设计RESTful API时,是否应将依赖于其他资源的资源建模为子资源,还是应该简单地相互引用?

E.g。假设门总是依赖于房子那么

/house/73/door/1

/house/73
/door/1044

房屋和门是否包含彼此的引用?

我发现的大多数RESTful API都非常扁平,因此我会重视对任何具有更复杂关系依赖性的API的引用。

此致

2 个答案:

答案 0 :(得分:13)

请记住,URI是服务器的实现细节。如果您可以将它们建模为平坦资源,那么就这样做。服务器处理它们会更容易。

如果门的标识符并非在所有房屋中都是唯一的,那么您的服务器将需要知道房屋,因此您需要将房屋包含在URI中。

资源之间的关系应该由返回的表示中的链接建模。即您的房屋代表应该包含该房屋所有门资源的链接。我建议尽量避免使用URL结构作为域名含义。

如果需要唯一标识资源,则仅使用层次结构。

答案 1 :(得分:13)

在UML术语中,如果关系是Aggregation的关系,那么你使用带有事物之间链接的平面层次结构,而如果关系是Composition的关系(即,door的生命周期严格受限于使用子资源的house)的生命周期。

我不是建议绘制UML图!但它确实有助于记住这种区别。 (您还可以通过将子资源重定向到真实的子资源来建模聚合案例;重定向 RESTful。OTOH,我实际上并不喜欢这样做;我更喜欢建立任何关系显式并保持重定向的数量。)