2010-04-08 128 views

回答

3

我已經使用了許多Web服務,它們將簡單的XML值作爲參數或將它們作爲輸出返回,所以我不確定爲什麼有人會認爲這是一種不好的做法,但我可以描述一些缺點。

我可以看到使用任意XML作爲輸入參數的主要缺點是它本身並不提供強類型。如果您正在使用基於SOAP的Web服務以及概述Web服務輸入和輸出變量的WSDL,那麼將基本XML用作變量不會爲用戶提供太多信息。如果您有一個基本的字符串輸入值,您認爲用戶將輸入XML數據,則情況尤其如此。更好的方法是使用XMLElement或XMLNode類型而不是標準字符串,以便在Web服務中至少有一個對有效XML進行類型檢查的基本級別。 SOAP和WSDL的想法雖然是創建強類型參數,以便全部對象可以在應用程序之間來回傳遞。您基本上可以創建一個對象並將其用作輸入或輸出值的基礎,並且SOAP將自動處理爲您創建序列化和反序列化的模式。

問題是使用複雜的數據類型會顯着增加調用Web服務所需的複雜性。 Web services提供從簡單的REST服務到複雜的WS - *協議的各種口味的強類型消息。使用Plain Old XML而沒有模式,如果您正在構建基於WS - *的企業到企業Web服務,那麼肯定不是一個好主意,但是如果您要創建一個簡單的REST服務,那麼POX可能恰好適合您的需求。

3

這個問題至少部分是由於我的關於字符串參數的評論,這些字符串參數包含XML在Web服務設計中是不好的做法。原因如下:

如果Web服務作者希望他的服務接受XML(帶或不帶架構),那麼他應該將該參數定義爲XML架構類型<xs:any/>。這允許任意的XML元素。可以通過使用<xs:any namespace="xml namespace" processContents="strict" />來限制允許的XML。這將限制XML來自特定的名稱空間,並將根據模式驗證XML。這種消息的接收者將能夠將其作爲純XML處理,或者可能是objectXmlElement或等效的平臺。

相反,如果將XML作爲字符串傳遞,則接收方必須採取措施將其重新轉換爲XML。這假定實際的XML已經正確編碼到字符串中。

傳遞一個字符串也會讓你失去XML的好處。例如,編碼的XML不容易被基於XML的工具(如XSLT)處理。

0

它的不好的做法,因爲它打開您的Web服務器到潛在的注入或XSS或URI中毒類型的攻擊。大多數Web服務器從不更新或修補,即使它們被識別爲易受攻擊。

相關問題