REST HATEOAS (成熟度レベル 3) はどの程度有用/重要ですか? [終了] 質問する

REST HATEOAS (成熟度レベル 3) はどの程度有用/重要ですか? [終了] 質問する

私は、REST API は HATEOAS に準拠し、リチャードソンの成熟度レベルをすべて実装する必要があると考える上級チームメンバーがいるプロジェクトに参加しています (http://martinfowler.com/articles/richardsonMaturityModel.html)!

私の知る限り、ほとんどの REST 実装は HATEOAS に準拠しておらず、多くの人がそれを行っていないのには十分な理由があるはずです。複雑さが増す、フレームワークが不足している (サーバー側とクライアント側)、パフォーマンスの懸念などの理由が考えられます。

どう思いますか? 実際のプロジェクトで HATEOAS を使用した経験はありますか?

ベストアンサー1

REST コミュニティでは、REST は簡単だと言う人はいません。ヘイトアスこれは、REST アーキテクチャに難しさを加える側面の 1 つにすぎません。

あなたが挙げた理由のすべて、つまり難しいという理由で、人々は HATEOAS を実行しません。HATEOAS はサーバー側とクライアント側の両方に複雑さを追加します (実際に HATEOAS のメリットを得たい場合)。

しかし、今日では何十億もの人々がRESTの恩恵を受けています。「チェックアウトURLはAmazonにありますか?知りません。それでも、毎日チェックアウトできます。URL は変更されましたか? 知りませんし、気にもしません。

誰が気にするか知っていますか? スクリーンスクレイピングされた Amazon 自動クライアントを書いたことがある人なら誰でも気にするでしょう。どのリンクをいつ、どのようなペイロードで呼び出すかを見つけるために、苦労して Web トラフィックをスニッフィングしたり、HTML ページを読んだりしたことがある人でしょう。

そして、Amazon が内部プロセスと URL 構造を変更するとすぐに、リンクが壊れたため、ハードコードされたクライアントは機能しなくなりました。

しかし、一般のウェブサーファーはほとんど問題なく一日中買い物をすることができました。

これが REST の実際の動作です。テキストベースのインターフェースを解釈して直感し、ショッピング カートの小さなグラフィックを認識して、それが実際に何を意味するのかを理解できる人間によって強化されているだけです。

ソフトウェアを書いている人のほとんどは、そんなことはしません。自動化されたクライアントを書いている人のほとんどは、気にしません。ほとんどの人は、そもそもアプリケーションが壊れないように設計するよりも、クライアントが壊れたときに修正する方が簡単だと考えています。ほとんどの人は、重要なところでクライアントが十分にないのです。

2 つのシステム間で通信するための内部 API を作成し、トラフィックの両側に専門の技術サポートと IT があり、変更を迅速かつ確実に、変更スケジュールに従って通信できる場合、REST では何も得られません。REST は必要ありません。アプリは十分な大きさではなく、重要になるほど長く存続しません。

大規模なユーザー ベースを持つ大規模なサイトには、この問題があります。システムとやり取りするときに、気まぐれにクライアント コードを変更するようユーザーに依頼することはできません。サーバーの開発スケジュールは、クライアントの開発スケジュールと同じではありません。API の突然の変更は、双方のトラフィックと操作を混乱させるため、関係者全員にとって受け入れがたいものです。

したがって、このような操作は、バージョン管理が容易で、古いクライアントの移行が容易で、下位互換性が維持されやすいため、HATEOAS の恩恵を受ける可能性が非常に高くなります。

ワークフローの多くをサーバーに委任し、その結果に基づいて行動するクライアントは、そうしないクライアントよりもサーバーの変更に対してはるかに堅牢です。

しかし、ほとんどの人はそのような柔軟性を必要としません。彼らは 2 つか 3 つの部門のためにサーバー コードを書いており、それはすべて社内での使用です。コードが壊れたら修正し、それを通常の業務に組み込んでいます。

REST からであれ、他のものからであれ、柔軟性は複雑さを生み出します。シンプルかつ高速にしたいのであれば、柔軟性を持たせるのではなく、「ただやる」だけで終わります。抽象化やシステムへの参照解除を追加すると、物事はより困難になり、定型文やテストするコードが増えます。

REST の多くは、「必要になることはない」という箇条書きには当てはまりません。もちろん、必要になるまでは。

必要な場合は、そのまま使用してください。REST は、HTTP 経由でデータをやり取りするものではありません。これまでもそうだったわけではありません。REST は、それよりもはるかに高いレベルのものです。

しかし、REST が必要で、REST を使用する場合は、HATEOAS が必須です。これはパッケージの一部であり、REST を機能させるための鍵となります。

例:-よりよく理解するために、サーバーから ID 123 のユーザーを取得する以下の応答を見てみましょう ( http://localhost:8080/user/123)。

{
    "name": "John Doe",
    "links": [{
            "rel": "self",
            "href": "http://localhost:8080/user/123"
        },
        {
            "rel": "posts",
            "href": "http://localhost:8080/user/123/post"
        },
        {
            "rel": "address",
            "href": "http://localhost:8080/user/123/address"
        }
    ]
}

おすすめ記事