我正在试图理解在基于 REST 的 API 中处理概念的最佳方法。不包含其他资源的平面资源没有问题。我遇到麻烦的地方是复杂的资源。
例如,我有一本漫画书的资源。ComicBook
具有 author
、 issue number
、 date
等各种属性。
一本漫画书也有一系列 1..n
封面。这些封面是复杂的物体。它们包含了很多关于封面的信息: 艺术家,日期,甚至是封面的64进制编码图像。
对于 ComicBook
上的 GET
,我可以只退回漫画,和所有的封面,包括他们的基础64’的图像。这可能不是什么大不了的获得一个单一的漫画。但是假设我正在构建一个客户端应用程序,它希望在一个表中列出系统中的所有漫画。
该表将包含来自 ComicBook
资源的一些属性,但是我们当然不希望显示表中的所有封面。返回1000本漫画书,每一本都有多个封面,将导致大量数据通过网络传输,而这些数据对于最终用户来说是不必要的。
我的直觉是使 Cover
资源,并有 ComicBook
包含涵盖。所以现在 Cover
是一个 URI。GET
漫画书工程现在,而不是巨大的 Cover
资源,我们发送回一个 URI 为每个封面和客户端可以检索封面资源,因为他们需要他们。
现在我在创作新漫画方面遇到了问题。当然,我希望在创建 Comic
时至少创建一个封面,事实上,这可能是一个业务规则。
所以现在我被困住了,我要么强迫客户强制执行业务规则,首先提交一个 Cover
,获得该封面的 URI,然后 POST
ing 一个包含该 URI 在列表中的 ComicBook
,或者我的 POST
在 ComicBook
上接受一个不同的外观资源,而不是它吐出来。POST
和 GET
的传入资源是深拷贝,其中传出的 GET
包含对依赖资源的引用。
在任何情况下,Cover
资源可能都是必要的,因为作为一个客户,我确信在某些情况下我希望解决覆盖方向的问题。因此,无论依赖资源的大小如何,问题都以一般形式存在。一般来说,如何处理复杂的资源而不强迫客户端“知道”这些资源是如何组成的?