RESTfulサービス-同等のWSDL


94

私はRESTとSOAPについて読んでいて、SOAPプロトコルを使用するよりもRESTを実装する方が有利な場合がある理由を理解しています。ただし、RESTの世界に同等の「WSDL」がない理由はまだわかりません。WSDLが「不要」である、またはRESTの世界では冗長であるという投稿を見てきましたが、その理由はわかりません。手動でコーディングするのではなく、プログラムで定義にバインドしてプロキシクラスを作成することが常に便利ではないでしょうか。RESTにWSDLがない理由、またはWSDLが不要な理由を探すだけで、哲学的な議論に入るつもりはありません。ありがとう。


4
同じ質問があります。クライアントの観点から見ると、WSDLサービスよりもRESTfulサービスの方がはるかに難しいようです。
w.donahue 2010年

4
単純なものを公開する場合、WADLやWSDLは必要ないように思えます。しかし、SAPのような複雑なものを公開している場合は...さまざまな機能を処理するための何らかのリフレクションと名前空間がないことを理解することはできません。
Brain2000 2011

HTTP OPTIONSメソッドは、可能なアクションに必要な使用可能なメソッドとパラメーターに関する情報を提供する必要があるため、「同等の」メソッドと見なすことはできませんか?
Dim13i 2014

回答:


44

Webアプリケーション記述言語(WADL)は、基本的にRESTfulなサービスのためのWSDLと同じですが、このようなものは全く必要とされているかどうかを継続的な論争が行われています。

Joe Gregorioは、そのトピックについて、読む価値のある素晴らしい記事を書いいます。


1
Joschi、ありがとう。私は記事を読みましたが、2つ目も説得力がありませんでした。彼が演説するどの点が最も価値があると思いましたか?
skaz

1
.NETにはメタデータを公開する方法もあることに注意してくださいmsdn.microsoft.com/en-us/library/ms730243.aspx)。そうは言っても、大きなサイトで開発されたほとんどのRESTサービスには、主要なプログラミング言語(Java、.NET、PHPなど)用に開発されたさまざまなダウンロード可能なクライアントが含まれています。私の意見では、これはサービスプロバイダーに大きな負担をかけます。
dana

4
@dana:クライアントを作成する必要があるサービスを作成することにはあまり意味がないようです。
BlueChippy

19

WSDLはサービスのエンドポイントを記述します。RESTクライアントをサーバーエンドポイントに結合しないでください(URLを事前に認識してはなりません)。RESTクライアントは、クライアントとサーバーの間で転送されるメディアタイプに結合されます。

クライアントでクラスを自動生成して、返されたメディアタイプをラップするのは理にかなっています。ただし、サービスの相互作用に関するプロキシクラスの作成を開始するとすぐに、HTTPの相互作用が不明瞭になり始め、RPCモデルに向かって縮退するリスクがあります。


4
もう少し詳しく説明してもらえますか?わかりません。ありがとう。
skaz

1
プロキシクラスは、コンパイル時にマシン検証を行う方法です。それらがなければ、手動で書かれたドキュメントとテストベースの「検証」しかありません。
Eric Grange

1
@EricGrange ...それでも、このアプローチはこれまでのところWebでかなりうまく機能しています。
Darrel Miller

1
@DarrelMillerは、「うまく機能した」と呼ばれるものに依存します。これは80年代のように、誰もが相互運用を紙のドキュメントから作成するので、機能しますが、「まあ」ですか。
エリックグランジ

4
@BlueChippyメディアタイプの仕様は、昔ながらの方法で処理されます。仕様の既存のパーサーを見つけるか、仕様を読んで自分で作成します。注意すべき重要な点は、メディアタイプの仕様をAPI間で再利用できるようにすることです。APIごとに新しいパーサーを作成すると、ポイントが無効になります。RESTが正しく行われるのは、クライアントとサーバーが独立して進化するという非常に長期的なメリットのためです。
Darrel Miller、

8

RSDLは、ハイパーメディアのように休息することを目的としています。つまり、RSDLは、WSDLやWADLのようなサービス記述子よりも多くの情報を持っています。たとえば、ハイパーテキストやハイパーリンクなどのナビゲーションに関する情報があります。

たとえば、現在のリソースを指定すると、関連する別のリソースへのosリンクが設定されます。

ただし、この形式をサポートするRestクライアントや、自動生成する機能を備えたRestサーバーソリューションは見つかりませんでした。

それについて結論を出すには長い道のりがあると思います。HTMLの長い話とW3C対ブラウザの笑をご覧ください。

HypermediaのようなRestの詳細については、http//en.wikipedia.org/wiki/HATEOASを参照してください。

注:ロイフィールディングは、過敏症アプローチなしのRest Apisにおけるこれらの傾向を批判しています:http ://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

私の結論:さて、WADLは、Camel CXFのようなRESTおよび統合フレームワークがすでにWADL(生成および消費)をサポートしていることより一般的です。これは、WSDLに似ているため、この移行プロセス(SOAPからREST)で最も理解しやすいためです。

次の章を見てみましょう;)


8

手動でコーディングするのではなく、プログラムで定義にバインドしてプロキシクラスを作成することが常に便利ではないでしょうか。

心から同意する、これが私がSwagger.ioを使用する理由です

Swaggerは、RESTful APIの設計、構築、文書化、および利用を支援するツールの大規模なエコシステムに支えられた強力なオープンソースフレームワークです。

つまり、基本的にはSwaggerを使用してモデルやエンドポイントなどを記述し、次にswagger-codegenなどの他のツールを使用します手動でコーディングする代わりに、てプロキシクラスを生成します。

参照:RAML


Swaggerもそれをしたことを知りませんでした。REST APIの単なるドキュメント/汎用フレームワークであると考えていました
Robert Dundon


3

WSDLは拡張可能であり、通信に使用されるメッセージフォーマットやネットワークプロトコルに関係なく、エンドポイントとそのメッセージの記述を許可します

ただし、RESTは、HTTP動詞とURIを使用してネットワークプロトコルを使用し、オブジェクトの状態を表します。

WSDLはこの場所で通知します。このメッセージを送信すると、このアクションが実行され、結果としてこのフォーマットが返されます。

RESTでは、新しいプロファイルを作成したい場合はPOST、URLにプロファイルを記述するJSONボディまたはhttpサーバー変数を含む動詞を使用します/profile

POSTステータスコード201 CREATEDとヘッダーを使用して、サーバー側で生成されたIDを返す必要がありますLocation: *new_profile_id*(例:12345)

次に/profile/12345、HTTP動詞を使用して状態を変更する更新を実行できますPOST。たとえば、メールアドレスや電話番号を変更できます。明らかにリモートオブジェクトの状態を変更します。

GET の現在のステータスを返します /profile/12345

PUT 通常、クライアント側で生成されたIDに使用されます

DELETE、明らか

HEAD、本文を返さずにステータスを取得します。

RESTを使用すると、適切に設計されたAPIを介して自己文書化され、使いやすくなります。

これは RESTに関するすばらしい記事です。それも本当に理解するのに役立ちます。


2
それはRESTのハイパーメディア制約であり、WSDLの必要性を排除する統一インターフェース制約よりもそうだと私は主張します。
Darrel Miller

3
どこで「プロフィール」を見つけますか?1つではなく数十人いる場合、どのように支援を提供しますか?残りのサービスはすべて、手書きのドキュメントと手動で作成されたAPIに依存しています。これらのAPIは、労働集約的でエラーが発生しやすいものです。
エリックグランジ

1
私は@EricGrangeに同意します-CRUD(L)操作を実行できるエンティティをどのようにして知っているか説明してください...誰かがどこかに書き留めない限り?
BlueChippy

2

WSDL 2.0仕様では、REST Webサービスのサポートも追加されています。両方のシナリオのベスト。問題は、WSDL 2.0がほとんどのツールでまだ広くサポートされていないことです。WSDL 2.0はW3Cを推奨し、WSDL1.1はW3Cを推奨していませんが、ツールや開発者によって広くサポートされています。参照:http : //www.ibm.com/developerworks/library/ws-restwsdl/


0

Webアプリケーション記述言語(WADL)は、RESTful Webサービスを記述するために使用されるXMLボキャブラリーです。

WSDLと同様に、汎用クライアントはWADLファイルをロードして、対応するWebサービスのすべての機能にアクセスできるようにすぐに備えることができます。

RESTfulサービスのインターフェースは単純であるため、WSDLはRPCスタイルのSOAPサービスに対するものであるので、WADLはこれらのサービスにとってそれほど必要ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.