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

Web services 将XML作为参数传递给web服务,web-services,Web Services,在对另一个问题的讨论中提到,将XML作为字符串参数传递给web服务是一种糟糕的做法。这是什么原因?< P>我使用了许多Web服务,这些服务将简单的XML值作为参数,或者将它们作为输出返回,所以我不确定为什么有人会认为它是一个坏的实践,但我可以描述一些弱点。 我可以看到,使用任意XML作为输入参数的主要缺点是,它本身不提供强类型。如果您使用的是基于SOAP的web服务和概述web服务输入和输出变量的WSDL,那么使用基本XML作为变量并不会向用户提供太多信息。如果您有一个基本的字符串输入值,并且假

在对另一个问题的讨论中提到,将XML作为字符串参数传递给web服务是一种糟糕的做法。这是什么原因?

< P>我使用了许多Web服务,这些服务将简单的XML值作为参数,或者将它们作为输出返回,所以我不确定为什么有人会认为它是一个坏的实践,但我可以描述一些弱点。 我可以看到,使用任意XML作为输入参数的主要缺点是,它本身不提供强类型。如果您使用的是基于SOAP的web服务和概述web服务输入和输出变量的WSDL,那么使用基本XML作为变量并不会向用户提供太多信息。如果您有一个基本的字符串输入值,并且假设用户将输入XML数据,则情况尤其如此。更好的方法是使用XMLElement或XMLNode类型,而不是标准字符串,这样web服务中至少有一个基本级别的有效XML类型检查。不过,SOAP和WSDL的想法是创建强类型参数,以便可以在应用程序之间来回传递完整的对象。您基本上可以创建一个对象并将其用作输入或输出值的基础,SOAP将自动为您处理序列化和反序列化模式的创建


问题是,使用复杂的数据类型会显著增加调用web服务所需的复杂性。从简单的服务到用于强类型消息的复杂的协议网络,提供了各种各样的服务。如果您正在基于WS-*,构建一个企业对企业web服务,那么不使用模式肯定是个坏主意,但是,如果您正在创建一个简单的REST服务,那么POX可能会很好地满足您的需要。

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

如果web服务作者希望他的服务接受XML(有或没有模式),那么他应该将参数定义为XML模式类型
。这允许使用任意XML元素。可以使用
限制允许的XML。这将限制XML来自特定名称空间,并根据模式验证XML。此类消息的接收者将能够将其作为纯XML处理,或者可能作为类型
对象
XmlElement
或同等平台处理

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


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

这是一种不好的做法,因为它会使web服务器面临潜在的注入、XSS或URI中毒类型的攻击。大多数web服务器即使被识别为易受攻击,也从未更新或修补过