将XML作为参数传递给Web服务

时间:2010-04-08 04:42:26

标签: web-services

在另一个问题answer中提到将XML作为字符串参数传递给Web服务是不好的做法。这是什么原因?

3 个答案:

答案 0 :(得分:3)

我使用了许多将简单的XML值作为参数的Web服务或将它们作为输出返回,所以我不确定为什么有人会认为这是一个不好的做法,但我可以描述一些弱点。

我可以看到使用任意XML作为输入参数的主要缺点是它本身不提供强类型。如果您使用基于SOAP的Web服务和WSDL概述Web服务输入和输出变量,那么使用基本XML作为变量不会向用户提供非常多的信息。如果您有一个基本字符串输入值,您认为用户将输入XML数据,则尤其如此。更好的方法是使用XMLElement或XMLNode类型而不是标准字符串,这样在Web服务中至少有一个基本级别的类型检查有效XML。使用SOAP和WSDL的想法是创建强类型参数,以便完整对象可以在应用程序之间来回传递。您基本上可以创建一个对象并将其用作输入或输出值的基础,SOAP将自动为您创建序列化和反序列化的模式。

问题是使用复杂数据类型会显着增加调用Web服务所需的复杂性。 Web services提供各种风格,从简单的REST服务到用于强类型消息的WS - *协议的复杂网络。如果您正在构建基于WS - *的企业对企业Web服务,那么使用没有架构的Plain Old XML肯定是一个坏主意,但如果您正在创建一个简单的REST服务,那么POX可能很适合您的需求。 / p>

答案 1 :(得分:3)

这个问题至少部分是由于我对于包含XML的字符串参数在Web服务设计中的不良做法的评论。原因如下:

如果Web服务作者希望他的服务接受XML,无论是否有模式,那么他应该将参数定义为XML Schema类型<xs:any/>。这允许任意XML元素。可以使用<xs:any namespace="xml namespace" processContents="strict" />来限制允许的XML。这将限制XML来自特定名称空间,并将针对模式验证XML。此类消息的收件人将能够将其作为纯XML处理,或者可以作为类型objectXmlElement或等效平台处理。

相反,如果XML作为字符串传递,则收件人必须采取措施将其转换回XML。这假设实际的XML已正确编码到字符串中。

传递字符串也会让您失去XML的好处。例如,编码的XML无法通过基于XML的工具轻松处理,例如XSLT。

答案 2 :(得分:0)

它的不良做法是因为它会使您的Web服务器打开潜在的注入或XSS或URI中毒类型的攻击。大多数Web服务器即使被识别为易受攻击也不会更新或修补。