2011-05-02 50 views
2

我正在通過基於SOAP的Web服務公開幾個域對象。我的一些域對象有大量的字段。除非需要,否則我不想將值包含在我的Web服務請求/響應中。減少JAX-WS Web服務中的數據流量

例如,如果我有一個帶有字段標題,流派和isbn的書域對象,如果我想使用我的Web服務更新書名,我希望我的請求只包含標題字段(省略其他兩個未更新的字段)。

同樣,我希望我的Web服務客戶端能夠指定他們在加載書籍時要返回哪些字段。

這將允許客戶端加載標題字段,從而減少數據的大小,因爲不需要的字段不會包含在響應中。

有沒有人知道處理這種類型的需求的任何模式或最佳做法?

回答

0

你觸動了許多問題,其中每個單獨的值得解釋:

  • 減少交通 - 減少交通通常意味着減少往返次數不降低有效載荷。減少流量是通過實施更好的操作來實現的,而不是暴露CRUD操作。
  • 減少有效負載 - 如果您不想傳輸整個實體,則應使用數據傳輸對象。特殊對象只傳輸給定操作所需的數據。
  • 動態響應 - Web服務不應該這樣做。 Web服務具有由WSDL定義的固定接口,其中每個消息有效載荷由XSD指定。如果你想動態改變返回的數據結構,你會打破這個。這並不意味着這是不可能的 - 您可以定義您的服務操作返回xsd:any =任何XML,這將是您的職責,準備返回的XML和您的客戶端分析XML的責任。
0

您可以使這些字段的XSD數據類型可選,或者你可以指定在changeTitle請求你不要指望Book,但只有一個ID和一個字符串。

當您發明changeAttributes請求並且您有可選字段時,您必須決定丟失字段的含義。可能是清除此字段請保持此字段未觸及