web-dev-qa-db-ja.com

WSDLコントラクトに対する互換性のない変更または下位互換性のある変更と見なされるものは何ですか?

このページ は以下の例をリストします:

  • 既存のWSDLドキュメントへの新しいWSDL操作の追加
  • 以前の既存のタイプに含まれていない、WSDL文書内の新しいXMLスキーマタイプの追加

しかし、どのような変更が下位互換性があると見なされるかについての定義または標準ガイドラインがあります。または、言い換えると、契約にどのような変更を加えても、クライアントを壊さないことを期待できます。

30
Asbjørn

私はこの特定のテーマにしばらく時間を費やし、下部にあるThomas Erlの本にいくつかのガイドラインを見つけました。ここに彼らが言わなければならないことがあります。

互換性のある変更

  • 新しいWSDL操作定義と関連するメッセージ定義を追加する
  • 新しいWSDLポートタイプ定義と関連する操作定義の追加
  • 新しいWSDLバインディングとサービス定義の追加
  • 新しいオプションのXMLスキーマ要素または属性宣言をメッセージ定義に追加する
  • xMLスキーマ要素またはメッセージ定義タイプの属性の制約の細分性を減らす
  • メッセージ定義タイプに新しいXMLスキーマワイルドカードを追加する
  • 新しいオプションのWS-Policyアサーションを追加する
  • 新しいWS-Policy代替を追加する

互換性のない変更

  • 既存のWSDL操作定義の名前を変更する
  • 既存のWSDL操作定義の削除
  • 既存のWSDL操作定義のMEPを変更する
  • 既存のWSDL操作定義に障害メッセージを追加する
  • 新しい必須XMLスキーマ要素または属性宣言をメッセージ定義に追加する
  • xMLスキーマ要素の制約粒度またはメッセージ定義の属性宣言を増やす
  • メッセージ定義内のオプションまたは必須のXMLスキーマ要素または属性の名前を変更する
  • オプションまたは必須のXMLスキーマ要素または属性またはワイルドカードをメッセージ定義から削除する
  • 新しい必要なWS-Policyアサーションまたは式を追加する
  • 無視できる新しいWS-Policy式を追加する(ほとんどの場合)

この特定の主題については、Thomas Erlらのすばらしい本があります。その名前はSOAのWebサービスコントラクトの設計とバージョン管理です。

HTH。

免責事項:私が述べたように、これは本の著者によって行われた仕事であり、私は単にそれを共有しています。とにかく私は提携していません。ちょうど本が好きだった:)

50
Selim

追加のオプションのリクエスト要素(minoccurs = 0)も下位互換性がある可能性があります-これはホスト側のサービスの実装に依存します。また、必須の応答要素をオプションのcouldに変更することも下位互換性があります。これはクライアントの実装によって異なります。

このエリアはトリッキーです。

後方互換性が本当に心配な場合は、新しいクライアント用にサービスの新しいバージョンを作成し、既存のクライアントの既存の実装を維持することを検討してください。また、一般に、サービスを介してドメインオブジェクトを送信することは避け、DTOを使用してください。

お役に立てれば。

3
Nick Ryan