web-dev-qa-db-ja.com

SOAP Webサービスにアクセスするプラグインを配布するときの落とし穴

私は思っています何の落とし穴(もしあれば?)ここで開発者達が出会ったWordPressプラグインを配布するとき via WordPressプラグインリポジトリSOAPクライアントを埋め込むアクセス用に== SOAP Webサービス 重要なプラグイン機能用に==(あるいは、他のリポジトリを介して広く配布されているプラ​​グインであれば問題ありません。)

(プラグインを公開している会社が開発する方がはるかに良いと私は思います RESTful Webサービス しかし、私はここで他の人の意見を調査することによってこの意見を検証したいと思います。私は私達の非常に独自の @ EAMann a Namesake.comに関する関連質問 を尋ねたことに注意してください。)

私はこれをコミュニティウィキにしているので、この件に関するすべての考えを捉えることができます。

6
MikeSchinkel

私はSOAPと話すことはできませんが、独自のサードパーティWebサービスと通信しなければならなかったクライアント用のプラグイン(プライベート)を作成しました。この場合、クエリの送信にクエリ文字列とXML POST要求の組み合わせを使用し(クエリの種類の複雑さに応じて)、結果データをXMLで返す、RESTfulではないインタフェースでした。

私はPHPクラスを構築して、より簡単に対処できるAPIにサービスを抽象化し、それらのインターフェースの矛盾とそれらが受け入れて返したさまざまなタイプのXML文書を平滑化しました。また、私自身の抽象化を作成することによって、私は自分のコードを将来の変更から保護することを望みました。たとえば、データを整理するための基本的な構造は同じだがJSONエンコーディングに切り替えた場合、ビジネスロジックの大部分はそのまま残り、データをエンコード/デコードするために要求と応答の部分を書き換えるだけで済みます。

あなたの質問には特定されていませんが、SOAPに関する私の過去の経験はほとんど否定的です。 SOAPがRPCサービスなのか、それともドキュメントトランスポートなのか、という長年の戦いがありました。 XMLの名前空間を使用するなど、やや非標準的な実装(たとえば、MicrosoftのSOAPサーバーでPerlのSOAP :: Liteモジュールを使用することに関する記事を検索するなど)から生じる複雑さと結びつけてください。すぐにイライラする。

しかし、あなたの質問が、クライアントサイドとサーバーサイドの両方のSOAP部分を作成している誰かの方針に沿っているのであれば、私は疑問に思います。もし私がWebサービス(そしてそれにアクセスするための関連WordPressプラグイン)を構築していたら、SOAPは間違いなくnotになるでしょう。

3
Dougal Campbell

私は個人的にはSOAPに接続するのは面倒だと思います。特にサーバーがJavaの場合はそうですが、私はクライアント用に開発したカスタムプラグインを使いました。要件によっては、WordPress 3.2ではSOAP 4のサポートが終了し、PHP 5にはPHPクライアントが組み込まれているため、特別なSOAPクライアントを埋め込む必要はありません。 SoapClient on php.net)ドキュメントにPHP 5が必要であることを明確にしてください。古いバージョンのPHPをサポートしたい場合は問題ありませんが、落とし穴があるだけです。ライブラリ名と競合しています。

例えば、私は2つのプラグインを使いたいのです。1つはURL短縮サービス、もう1つはTwitterプラグインです。まあ、短縮プラグインもいくつかのTwitterの機能を持っており、それらは両方とも同じOAuthライブラリを含んでいます。言うまでもなく、特定のOAuthクラスを再定義するとエラーが発生します。

これを回避する方法は、最終的にはPHP名前空間になりますが、PHP 4のサポートについて話しているので、うまくいきません。最善の策は、たとえばライブラリSoapClientがMyPlugin_SoapClientになり、どこでも使用できるようにクラス名を変更することです。あるいは、インクルード文を次のようにラップすることもできます。

if (!class_exists('SoapClient')) { include 'inc/soapclient.php'; }

そしてそれはうまくいけば紛争問題を解決するでしょう。

3
Andrew Shell