问题:我正在尝试找到一种更好的方法来管理多个Web站点(域/ ips)共享的多个SOAP客户端/服务器的更改。幸运的是,我控制了所有SOAP服务器/客户端,但我偶尔需要在一些复杂类型中添加一个或两个新字段。
添加字段会导致相关站点之间出现依赖性问题。 SOAP服务器中没有新字段会导致错误发生。部署到dev,demo,prod版本的这些网站会导致依赖性噩梦发生。
我已经看到了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>
答案 0 :(得分:0)
当您进行向后不兼容的更改时,您应该将端点移动到新的URL或提供其他类型的标记;在某些地方,声明所需版本的XML属性附加到band中的第一个元素。在其他情况下,它是HTTP POST请求中包含的标头(或者更少见的是查询字符串)。然后,您必须在多个位置考虑API的多个版本。
作为旁注(不要试图在这里开始战争):这是REST架构真正闪耀的地方:所有版本控制都由MIME类型处理。如果资源不能支持给定的MIME类型,它可以向请求者发出这一事实,并代之以协商更兼容的版本。