代码之家  ›  专栏  ›  技术社区  ›  Alex Angas Colin

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

  •  3
  • Alex Angas Colin  · 技术社区  · 14 年前

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

    3 回复  |  直到 7 年前
        1
  •  3
  •   Greg Bray    14 年前

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

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

    Web services 提供各种口味,从简单的 REST WS - * 强类型消息的协议。使用 Plain Old XML

        2
  •  4
  •   John Saunders Tony    14 年前

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

    如果web服务作者希望他的服务接受XML(有或没有模式),那么他应该将参数定义为XML模式类型 <xs:any/> <xs:any namespace="xml namespace" processContents="strict" /> . 这将限制XML来自特定命名空间,并根据模式验证XML。此类消息的接收者将能够将其作为纯XML或类型进行处理 object XmlElement

    传递字符串也会失去XML的好处。例如,编码的XML不能很容易地被基于XML的工具(如XSLT)处理。

        3
  •  0
  •   austin cheney austin cheney    14 年前

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