分散アプリケーションでクライアントコンポーネントとサーバーコンポーネント間の結合を最小限に抑えることが非常に重要な場合は、RESTを使用する必要があります。
これは、ユーザーが制御できない多くの異なるクライアントによってサーバーが使用される場合に当てはまります。また、クライアントソフトウェアを更新せずにサーバーを定期的に更新できるようにする必要がある場合もあります。
この低レベルのカップリングを実現するのは簡単ではないことは確かです。成功するには、RESTのすべての制約に従うことが重要です。純粋にステートレスな接続を維持することは困難です。適切なメディアタイプを選択し、データをフォーマットに圧縮するのは難しい作業です。独自のメディアタイプを作成することはさらに困難です。
リッチサーバーの動作を統一されたHTTPインターフェースに適合させることは混乱を招く可能性があり、比較的単純なRPCアプローチと比較すると、時々奇妙に見えます。
困難にもかかわらず、利点は、HTTPプロトコルの一貫した使用により、クライアント開発者が簡単に理解できるはずのサービスがあることです。ハイパーメディアにより、サービスは簡単に検出可能であり、クライアントはサーバーでの変更に対して非常に回復力がある必要があります。
ハイパーメディアの利点とセッション状態の回避により、負荷分散が簡単になり、サービスのパーティション化が実現可能になります。HTTPルールに厳密に準拠しているため、デバッガーやキャッシュプロキシなどのツールを利用できるのはすばらしいことです。
更新
RESTはもう1つの「ファッションの最後の言葉」であるように見えます(または、RESTを実際に見たことがないので、私は完全に間違っている可能性があります)。
SOAタイプのプロジェクトを行おうとする人々が、SOAPスタックを使用しても、約束された利点を実現していないことに気付いたため、RESTはファッショナブルになったと思います。人々は、単純な統合方法論の例としてWebに戻り続けています。残念ながら、人々はWebの作成に費やした計画と予測の量を過小評価しており、Web上で発生する一種の偶発的な再利用を可能にするために必要なことを単純化しすぎていると思います。
実際にはRESTを見たことがないとおっしゃっていますが、Webブラウザーを使用する場合は、それが本当の可能性はありません。WebブラウザーはRESTクライアントです。
- 誰かがWebサイトのHTMLを変更したときに、ブラウザを更新する必要がないのはなぜですか。
- 完全な新しいページのセットをWebサイトに追加しても、「クライアント」が更新なしでそれらの新しいページにアクセスできるのはなぜですか?
- Webブラウザーに「service-description-language」を提供して、http://example.org/images/catに移動したときに、戻り値の型がjpeg画像になること
を通知する必要がないのはなぜですか。http://example.org/description/cat
戻り値の型は、text / htmlのでしょうか?
- ブラウザーがリリースされたときに存在しなかったサイトにWebブラウザーを使用してアクセスできるのはなぜですか?クライアントはこれらのサイトについてどのように知ることができますか?
これらは非常に難しい質問のように聞こえるかもしれませんが、答えがわかっている場合は、RESTの概要を確認できます。RESTのその他の利点については、StackOverflowをご覧ください。質問を見ているときに、そのページをブックマークしたり、URLを友達に送信したりすると、同じ情報を見ることができます。その質問を見つけるためにサイトをナビゲートする必要はありません。
StackOverflowは、認証にはさまざまなOpenIdサービス、アバター画像にはgravatar.com、分析情報にはgoogle-analyticsおよびQuantserveを使用します。この種の複数企業の統合は、SOAPの世界だけが夢見るタイプのことです。最良の例の1つは、StackOverflow UIの駆動に使用されるjQueryライブラリがGoogleのコンテンツ配信ネットワークから取得されることです。SOがクライアント(つまりWebブラウザー)にサードパーティのサイトからコードをダウンロードしてパフォーマンスを向上させることができるという事実は、Webクライアントとサーバー間の結合が低いことを証明しています。
これらは作業中のRESTアーキテクチャの例です。
現在、一部のWebサイト/アプリケーションはRESTの規則に違反しており、ブラウザーは期待どおりに機能しません。
- 悪名高い[ 戻る]ボタンの問題
は、サーバー側のセッション状態の使用が原因で発生します。
- サーバー側のセッション状態があると、負荷分散が面倒になる可能性があります。
- Flashアプリケーションでは、URLが表現を明確に識別できないことがよくあります。
- Webブラウザーを破壊するもう1つの問題は、メディアタイプの標準への適合性が低いことです。IE6をどのように殺す必要があるかについて、いつも耳にします。問題は、基準が適切に守られなかったか、何らかの理由で無視されたことです。
- ログインセッションの使用は、多くのセキュリティホールの原因です。
RESTはどこにでもあります。うまく機能するのはウェブの一部です。Webのように拡張できる分散アプリケーションを構築したい場合は、Webのように変更できるように弾力性を持ち、Webのように再利用を促進します。次に、Webブラウザーの構築時と同じルールに従います。