0

问题:我试图找到一种更好的方法来管理对多个网站(域/ips)共享的多个 SOAP 客户端/服务器的更改。幸运的是,我可以控制所有 SOAP 服务器/客户端,但是我偶尔需要为某些复杂类型添加一两个新字段。

添加字段会导致相关站点之间发生依赖性问题。SOAP 服务器中没有新字段会导致发生错误。部署到这些站点的开发、演示、生产版本会导致依赖噩梦的发生。

我已经看到 SugarCRM 设置其复杂类型的方式,并注意到它们具有名称/值对列表。我正在考虑采用类似的方法,但想从 Stackoverflow 上的人们那里获得一些反馈。我主要使用 PHP/MySQL。

这种方法有问题吗?我认为这将允许我定义任意数量的名称/值对。我认为它可能会导致 SOAPClient 类映射存在问题?

<xsd:complexType name="name_value">
    <xsd:all>
        <xsd:element name="name" type="xsd:string"/>
        <xsd:element name="value" type="xsd:string"/>
    </xsd:all>
</xsd:complexType>

<xsd:complexType name="name_value_list">
    <xsd:complexContent>
        <xsd:restriction base="SOAP-ENC:Array">
        <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:name_value[]"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="name_value_lists">
    <xsd:complexContent>
        <xsd:restriction base="SOAP-ENC:Array">
        <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:name_value_list[]"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>
4

1 回答 1

0

当您进行向后不兼容的更改时,您应该将端点移动到新的 URL 或提供某种其他类型的标记;在某些地方,声明所需版本的 XML 属性附加到 band 中的第一个元素。在其他情况下,它是 HTTP POST 请求中包含的标头(或者更罕见的是查询字符串)。然后,您必须考虑跨多个位置的 API 的多个版本。

作为旁注(不是想在这里挑起战争):这是 REST 架构真正闪耀的地方:所有版本控制都由 MIME 类型处理。如果资源不支持给定的 MIME 类型,它可以向请求者发送信号,并协商一个更兼容的版本。

于 2012-07-04T01:16:49.510 回答