减少JAX-WS Web服务中的数据流量

时间:2011-05-02 22:13:22

标签: java web-services jax-ws

我通过基于SOAP的Web服务公开了几个域对象。我的一些域对象有很多字段。除非需要,否则我不想在我的Web服务请求/响应中包含值。

例如,如果我有一个包含字段title,genre和isbn的Book域对象,如果我想使用我的Web服务来更新书名,我希望我的请求只包含title字段(省略另外两个未更新的字段)。

同样,我希望我的Web服务客户端能够指定他们在加载书籍时要返回哪些字段。

这将允许客户端加载标题字段,从而减少通过网络传输的数据的大小,因为不需要的字段不会包含在响应中。

有没有人知道处理此类要求的任何模式或最佳做法?

2 个答案:

答案 0 :(得分:0)

你触及多个问题,每个问题都应该单独解释:

  • 减少流量 - 减少流量通常意味着减少往返而不减少有效载荷。通过实现更好的操作来实现减少流量,这些操作可以执行多个操作,而不是暴露CRUD操作。
  • 减少有效负载 - 如果您不想传输整个实体,则应使用数据传输对象。特殊对象仅传输给定操作所需的数据。
  • 动态响应 - Web服务不应该这样做。 Web服务具有由WSDL定义的固定接口,其中每个消息有效负载由XSD指定。如果您想动态更改返回的数据结构,您将打破这一点。这并不意味着它是不可能的 - 您可以定义您的服务操作返回xsd:any =任何XML,并且您有责任准备返回的XML以及客户端解析XML的职责。

答案 1 :(得分:0)

您可以在XSD数据类型中创建可选字段,也可以在changeTitle请求中指定您不期望Book,但仅限一个ID和一个字符串。

当您发明changeAttributes请求并且您有可选字段时,您必须确定缺少字段的含义。它可以清除此字段保持此字段不变