在我尝试使用REST架构风格重新设计现有应用程序时,我遇到了一个问题,我想将其称为"Mediatype Explosion".但是,我不确定这是否真的是REST的问题或固有的好处.要解释我的意思,请参考以下示例
我们的应用程序的一小部分看起来像:
收集-collections-的 - >集合-的-物品─>项
即顶级是集合的集合,这些集合中的每一个都是项目的集合.
此外,每个项目都有8个属性,可以单独读取和写入.尝试将上述层次结构公开为RESTful资源会让我看到以下媒体类型:
application/vnd.mycompany.collection-of-collections+xml
application/vnd.mycompany.collection-of-items+xml
application/vnd.mycompany.item+xml
Run Code Online (Sandbox Code Playgroud)
此外,由于每个项目具有8个可以单独读取和写入的属性,因此将产生另外8种媒体类型.例如,项目的"值"属性的一种这样的媒体类型将是:
application/vnd.mycompany.item_value+xml
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,这只是我们应用程序的一小部分,我希望有几个不同的集合和项目需要以这种方式公开.
我的问题是:
我也知道上面的设计是高度精细的,特别是暴露项目的各个属性,并为每个属性分别设置媒体类型.然而,使其粗糙意味着我将最终通过线路传输不必要的数据,而实际上客户端只需要读取或写入项目的单个属性.你会如何处理这样的设计问题?
有什么好处
http://www.example.com/app/servlet/cat1/cat2/item
Run Code Online (Sandbox Code Playgroud)
网址
过度
http://www.example.com/app/servlet?catid=12345
Run Code Online (Sandbox Code Playgroud)
网址
如果我们使用第一个URL会有任何问题,因为最初我们使用的是第一个URL并更改为第二个URL.这是在网站上不断变化的内容的背景下.这里的类别数量可以是无限的.
rest ×2