サードパーティと統合する SOAP アプリケーションを開発しています。このサードパーティの WSDL は非常に奇妙だと思います。私は SOAP にかなり慣れていないので、壊れていなければ修正を依頼したくありません。技術的には有効なドキュメントであると確信していますが、これについて間違っていると私が気づいたことがいくつかあります (したがって、タイトルに「ベスト プラクティス」と書いたのはそのためです)。また、私は SOAP ライブラリとして gSOAP を使用しています。これが、これらのいくつかが奇妙だと思う理由かもしれません (一般的な SOAP よりも gSOAP の方が新しいのです)。
同じ WSDL に SOAP 1.1 と SOAP 1.2 の両方に指定されたインターフェースがあります。1.2 しか使用しないため、これにより gSOAP は必要なクラスの 2 倍を生成します。
名前空間はすべて
http://tempuri.org
. そんなはずないですよね?多数の RPC 呼び出しを定義しているにもかかわらず、彼らの WSDL はドキュメント形式を使用しています。gSOAP ではドキュメント形式に C++ の型付きパラメータを取るメソッドが生成されないようなので、RPC 形式に切り替えてもらいたいと考えています。代わりに、すべての API 関数の入力および応答データに対して新しいクラスを作成します。修正できない場合は、gSOAP をラップする別のレイヤーを作成して、アプリの残りの部分に適切な API を提供する必要があります。また、AFAICT、行き来する XML は RPC に切り替えれば今とまったく同じになるので、難しいことはないと思います。
要素には minOccurs = 0 がありますが、要素なしでリクエストを送信すると、要素が必要であることを示すエラーが返されます (場合によっては、null ポインター例外のスタック トレースさえあります)。必要な場合は、minOccurs = 1 と指定する必要がありますよね?
ほとんどすべての Web サービス関数は、成功を示す整数 (実際にはブール値) とエラー メッセージ文字列を含む応答を指定します。これには SOAP フォールトを使用する必要がありますか? gSOAP を使用すると、それを非常に簡単に把握できる (そして、エラー メッセージを簡単に出力できる) ため、障害が発生した場合、アプリケーションが処理しやすくなると思います。
もちろん、私が依頼したからといって、このサードパーティ企業が WSDL を変更することを期待しているわけではありません。少なくとも私は何かを学ぶだろう... 私が知っている限りでは、これらのどれも間違っていないし、疑わしいことさえない. ご協力いただきありがとうございます。