0

問題: 複数の Web サイト (ドメイン/IP) で共有されている複数の SOAP クライアント/サーバーへの変更を管理するためのより良い方法を見つけようとしています。幸いなことに、私はすべての SOAP サーバー/クライアントを制御できますが、複雑な型のいくつかに新しいフィールドを 1 つか 2 つ追加する必要がある場合があります。

フィールドを追加すると、関連するサイト全体で依存関係の問題が発生します。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>
4

1 に答える 1

0

下位互換性のない変更を行う場合は、エンドポイントを新しい URL に移動するか、他の種類のマーカーを提供する必要があります。一部の場所では、必要なバージョンを宣言する XML 属性がバンドの最初の要素に添付されています。他の場合は、HTTP POST 要求に含まれるヘッダー (または、まれにクエリ文字列) です。次に、複数の場所にまたがる複数のバージョンの API を考慮する必要があります。

余談ですが (ここで戦争を始めようとしているわけではありません): ここで REST アーキテクチャが真価を発揮します。すべてのバージョン管理は MIME タイプによって処理されます。リソースが特定の MIME タイプをサポートできない場合、その事実をリクエスタに通知し、代わりにより互換性のあるバージョンをネゴシエートできます。

于 2012-07-04T01:16:49.510 に答える