使用RESTful API建模资源关系

How*_*May 15 rest

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

例如,假设一扇门总是依赖于房屋

/house/73/door/1
Run Code Online (Sandbox Code Playgroud)

要么

/house/73
/door/1044
Run Code Online (Sandbox Code Playgroud)

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

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

问候

Dar*_*ler 13

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

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

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

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


Don*_*ows 13

在UML术语中,如果关系是Aggregation的关系,那么你使用带有事物之间链接的平面层次结构,而如果关系是Composition的关系(即a的生命周期door严格受a的生命周期限制house),则使用sub -resources.

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