java为数据密集型web服务提供细粒度数据
我正在开发一个数据密集型的Web服务。 不幸的是,并非所有的调用都需要它返回的所有数据,但另一个调用可能需要它返回的所有数据
过于简化的回答可能如下所示:
Response : { A, B, C, D : { X : { } y, z } }
我希望为调用者提供灵活性,以便他们可以从大对象请求特定数据。 我想通过公开枚举并将枚举列表作为输入来实现它。每个枚举映射到一个字段作为响应
例如,如果调用者只需要A和D,那么他们可以通过传递像ImmutableList这样的枚举列表来指定它。of(GET_ENUM_A,GET_ENUM_D) 在web服务端,我只能计算A和D
问题: 有没有更好的方法来输入(而不是枚举)调用方需要的数据
我想让用户控制更细粒度的数据,例如,他们可以指定需要D的哪一部分。 获取_ENUM_D_X
在服务器端,我正在考虑使用命令模式来实现它,为每个枚举使用一个命令,并且仅当列表中存在相应的枚举时才执行它
- 这里我的D将是一个门面李>
- 如果请求粒度数据,则不要使用facade,而是使用X命令
我能想到的问题是:
- 我的命令太多了李>
- 如果一个命令是另一个命令的子集,并且两个命令都被请求,那么只执行超集命令(我们需要在代码中这样做)
有没有更好的办法解决这个问题
(注:由于某些用例,我对将其拆分成更小的API不感兴趣)
# 1 楼答案
如果使用Jackson序列化对象,可以利用视图:
http://wiki.fasterxml.com/JacksonJsonViews
基本上,定义一个视图类,然后序列化要在视图中传递的对象。例如:
然后,当您想要序列化时,可以传入您想要的视图:
如果你想同时得到a和c,你可以使用AC类