私は Web サービスに不慣れで、2 つのパラメーターを受け取る Web サービス (できれば SOAP ベース) を作成する設計上の問題に直面しています。
- 文字列変数 (クライアント名);
- XML データ。
現在、この Web サービスには 2 つの異なるコンシューマーがいますが、その数は増える予定です。すべてのコンシューマーは、送信する個別の XSD データを持っています。次に例を示します。
コンシューマー1:
<ConData>
<Customer>
<FirstName>FirName</FirstName>
<LastName>LasName</LastName>
</Customer>
<Acocunt>
<Number>112971</Number>
</Account>
<Order>
<OrderNum>0092123</OrderNum>
</Order>
<ConData>
コンシューマ 2:
<ConData>
<SysData>
<CustomerFirstName>Name</CustomerFirstName>
<CustomerLastName>Name</CustomerLastName>
<AccountNumber>Au1o2n</AccountNumber>
<OrderNum>koo912</OrderNum>
</SysData>
<ConData>
この Web サービスは、これらのクライアントから XML データを取得し、コンシューマー名に基づいてデータベースに格納することになっています。XML 自体を検証するために必要な処理はありません。XML を取得してデータベースに保存するだけです。
ただし、良い設計として、明示的なパラメーターを使用して Web サービスを定義したいと考えています。問題は、それらの XML データ形式が異なるため、単一の XSD スキーマを WSDL のパラメーターとして使用できないことです。これに対処するための 2 つのオプションを考えることができます。
1. XSD マッピング パラメータではなく、Web サービスで XML データを文字列として渡すようにします。これは有効なアプローチですが、検証が無効になり、多くの手動のマーシャリングとアンマーシャリングおよびその他の問題が必要になるため、これまでフォーラムで読んだことに基づくと、悪い設計のように思えます。さらに、私の WSDL は、期待される形式などをクライアントに定義することができません。
2. 独自の XSD を持つ異なる個々のコンシューマーを処理する 2 つの別個の Web サービスを作成します。将来的にコンシューマーを追加する場合、同じ操作のための重複したコードを含む新しい Web サービスを追加する必要があるため、これも実行可能性が低いように思われます。
単一の Web サービス WSDL で複数の XSD を定義する方法があるかどうか、またはこの問題を解決するためのより良い方法があるかどうかを調べていました。
余談ですが、私は SOAP ベースの Web サービスを使用したいと考えていますが、RESTful Web サービスを使用してこの問題がより適切に解決される場合は、それも検討できます。