RESTコミュニティの誰もが、RESTは簡単だと言っています。HATEOASは、RESTアーキテクチャに困難を加える側面の1つにすぎません。
人々はあなたが提案するすべての理由のためにHATEOASをしません:それは難しいです。これにより、サーバー側とクライアントの両方が複雑になります(実際にそれを利用したい場合)。
しかし、今日、何十億もの人々がRESTのメリットを体験しています。Amazonの「チェックアウト」URLを知っていますか?私はしません。それでも、私は毎日チェックアウトできます。そのURLは変更されましたか?私は知らない、私は気にしない。
気にしてますか?画面を書いた人なら誰でも、Amazonの自動クライアントをこすり落としました。Webトラフィックを手際よく探知したり、HTMLページを読んだりして、いつどのペイロードでどのリンクを呼び出すかを見つける人。
また、Amazonが内部プロセスとURL構造を変更するとすぐに、ハードコードされたクライアントは失敗しました。リンクが壊れたためです。
それでも、カジュアルなWebサーファーはほとんど問題なく1日中買い物をすることができました。
これはRESTの動作です。テキストベースのインターフェースを解釈および直感し、ショッピングカートで小さなグラフィックを認識し、それが実際に何を意味するかを理解できる人間によって拡張されています。
ソフトウェアを書いているほとんどの人はそれをしません。自動クライアントを作成しているほとんどの人は気にしません。ほとんどの人は、最初に壊れないようにアプリケーションを設計するよりも、壊れたときにクライアントを修正する方が簡単だと感じています。ほとんどの人はそれが重要な場所に十分なクライアントを持っていません。
トラフィックの両側で専門のテクニカルサポートとITを備えた2つのシステム間で通信する内部APIを作成していて、変更を迅速かつ確実に、変更のスケジュールで通信できる場合、RESTは何も購入しません。あなたはそれを必要としません、あなたのアプリは十分に大きくありません、そしてそれは問題になるほど十分に長く生きていません。
大きなユーザーベースを持つ大規模なサイトには、この問題があります。彼らは、システムとやり取りするときに、気まぐれでクライアントコードを変更するように人々に要求することはできません。サーバーの開発スケジュールは、クライアントの開発スケジュールと同じではありません。APIの突然の変更は、関係するすべての人に受け入れられません。両側でトラフィックと操作が中断されるためです。
したがって、このような操作はHATEOASの恩恵を受ける可能性が非常に高くなります。バージョン管理が簡単で、古いクライアントの移行が簡単で、下位互換性がない場合よりも簡単です。
ワークフローの多くをサーバーに委任し、その結果に基づいて動作するクライアントは、サーバーの変更に対して、そうでないクライアントよりもはるかに堅牢です。
しかし、ほとんどの人はそのような柔軟性を必要としません。彼らは2つまたは3つの部門用のサーバーコードを作成しています。壊れた場合は修正し、通常の操作に組み込んだ。
RESTであろうとなかろうと、柔軟性は複雑さを生みます。シンプルかつ高速にしたい場合は、柔軟にせずに、「やるだけ」で完了です。システムに抽象化と逆参照を追加すると、テストが難しくなり、ボイラープレートが増え、テストするコードが増えます。
RESTの多くは、「それを必要としない」という箇条書きに失敗しています。もちろん、そうするまでは。
必要な場合は、それを使用し、レイアウトされているとおりに使用してください。RESTは、HTTPを介してデータをやり取りしません。それは今までになかった、それよりもはるかに高いレベルです。
ただし、RESTが必要で、RESTを使用する場合は、HATEOASが必要です。これはパッケージの一部であり、それが機能するための鍵となります。