【发布时间】:2011-10-29 14:15:56
【问题描述】:
我正试图围绕在基于 REST 的 API 中处理概念的最佳方法展开思考。不包含其他资源的平面资源没有问题。我遇到麻烦的地方是复杂的资源。
例如,我有一本漫画书的资源。 ComicBook 上面有各种属性,如 author、issue number、date 等。
一本漫画书也有一个1..n 封面列表。这些封面是复杂的对象。它们包含很多关于封面的信息:艺术家、日期,甚至是封面的 base 64 编码图像。
对于GETComicBook 上的GET,我可以退回漫画和所有封面,包括它们的base64 图像。对于获得一部漫画来说,这可能没什么大不了的。但是假设我正在构建一个客户端应用程序,它想在一个表格中列出系统中的所有漫画。
该表将包含来自ComicBook 资源的一些属性,但我们当然不希望显示表中的所有封面。返回 1000 本漫画书,每本漫画书都有多个封面,这将导致大量数据通过网络传输,在这种情况下,这些数据对于最终用户来说是不必要的。
我的直觉是让Cover 成为资源并让ComicBook 包含封面。所以现在Cover 是一个URI。 GET 现在可以在漫画书上使用,而不是巨大的 Cover 资源,我们为每个封面发送回一个 URI,客户可以根据需要检索封面资源。
现在我在创作新漫画时遇到了问题。当我创建 Comic 时,我肯定会想要创建至少一个封面,事实上这可能是一个业务规则。
所以现在我被困住了,我要么通过首先提交Cover,获取该封面的URI,然后POST在列表中带有该URI的ComicBook来强制客户执行业务规则,要么我的@ ComicBook 上的 987654340@ 接收的资源与它吐出的资源不同。 POST 和 GET 的传入资源是深层副本,其中传出 GETs 包含对依赖资源的引用。
Cover 资源在任何情况下都可能是必要的,因为我确信作为客户,我想在某些情况下解决方向。因此,无论依赖资源的大小如何,问题都以一般形式存在。一般来说,您如何处理复杂的资源而不强迫客户“知道”这些资源是如何组成的?
【问题讨论】:
-
使用RESTFUL SERVICE DISCOVERY 有意义吗?
-
我正在尝试遵守 HATEAOS,在我看来,这与使用类似的东西背道而驰,但我会看看。
-
本着同样的精神提出不同的问题。但是,所有权与您提出的解决方案不同(问题中的那个)。 stackoverflow.com/questions/20951419/…
标签: api rest resources nested-resources