ハイパーメディア(HATEOAS)の利点は何ですか?


17

(人間がAPIを直接参照するのとは対照的に)プログラムによる使用を目的としたAPIのHATEOASの利点を理解していません。確かに、顧客はURLスキーマにバインドされていませんが、私の考えでは同じデータスキーマにバインドされています。

たとえば、注文のアイテムを表示する場合、注文のURLをすでに発見または知っていると仮定します。

HATEOAS:

order = get(orderURL);
item = get(order.itemURL[5]);

非HATEOAS:

order = get(orderURL);
item = get(getItemURL(order,5));

最初のモデルでは、注文オブジェクトにitemURLフィールドがあるという事実を知る必要があります。2番目のモデルでは、アイテムURLを作成する方法を知っている必要があります。どちらの場合も、事前に何かを「知る」必要があるので、HATEOASは実際に何をしてくれますか?


1
get(orderURL);あなたに言うべきですthe fact that the order object has an itemURL field
ヤニス

クライアントアプリケーションを作成する場合、フィールドが何であるかを事前に知る必要があります。
ペース


8
アプリケーションが注文にアイテムがあることすら知らない場合、アプリケーションはどのように注文からアイテムを取得することになっていますか?ディスカバリーは手動ブラウジングでは機能しますが、自動アプリケーションでは機能しません。
ペース

男性自身が、ここでそれについて話:roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
チアゴ・シウバ

回答:


6

1つの違いは、スキーマができれば標準であるか、少なくとも他のユーザーが再利用できることです。

たとえば、Twitter APIを使用していて、StatusNetも(または代わりに)サポートしたいとします。Twitterと同じデータモデルを使用しているため、APIがHATEOASに従う場合、メインURLを変更するだけです。そうでない場合は、コードから各URLを変更する必要があります。

もちろん、サービスのエントリポイントURLを配置するためにコードを変更する必要がある場合は、それほど役に立たないかもしれません。そのURLが動的に挿入されると、本当に素晴らしいです。たとえば、Twillioのようなサービスを構築している場合、ユーザー自身のAPIとやり取りします。


それは私が考慮していなかった興味深い点です。
ペース

@YannisRizos:うーん、どこでHATEOASが標準だと言ったのかわかりません。「(データ)スキーマが標準になっていることを願っています」。RESTの用語では、これがメディアタイプになります。
アンドレパラメ

二度目に読むと、あなたは絶対に正しいです。
ヤニス

2
はい、リンクのrel名が同じであると仮定した場合。しかし、一般的に言えば、あなたが言及した特定の例だけでなく、世界中のすべてのプログラマーが、類似または同等のアクションに対して必ずしも同じ名前を選択するとは限りません。この利点は、一般的なインターフェイスの命名とパラメーターに同意するプログラマーから得られます。
derloopkat

8
  1. 探索可能なAPI:些細に聞こえるかもしれませんが、探索可能なAPIの能力を過小評価していません。データを参照する機能により、クライアント開発者はAPIとそのデータ構造のメンタルモデルを簡単に構築できます。

  2. インラインドキュメント:リンク関係としてURLを使用すると、クライアント開発者がドキュメントを参照できるようになります。

  3. 単純なクライアントロジック:URL自体を構築するのではなく、単にURLを追跡するクライアントは、実装と保守が簡単になります。

  4. サーバーはURL構造の所有権を取得します。ハイパーメディアを使用すると、サーバーが使用するURL構造に関するクライアントのハードコードされた知識が削除されます。

  5. コンテンツを他のサービスにオフロードする:コンテンツを他のサーバー(CDNなど)にオフロードする場合、ハイパーメディアが必要です。

  6. リンク付きのバージョン管理:Hypermediaは、APIのバージョン管理に役立ちます。

  7. 同じサービスの複数の実装:ハイパーメディアは、同じサービスの複数の実装が存在する場合に必要です(1つのクライアントがそれらの複数にアクセスする必要がある)。

これらの箇条書きの詳細については、http//soabits.blogspot.no/2013/12/selling-benefits-of-hypermedia.htmlをご覧ください。


>コンテンツを他のサービスにオフロードする:コンテンツを他のサーバー(CDNなど)にオフロードする場合、ハイパーメディアが必要です。いいえ、ちがいます。同じリンクを保持して、CDNを使用できます。
ブルーノコスタ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.