ハイパーメディア ベースの API を構築しようとしています。物事はうまくいっているようです。フェッチ/books/isbn/12313441213
すると、次のようなものが得られます。
<book>
<id>123</id>
<name>Hypermedia APIs</name>
<description>Basic api design techniques</description>
<tags>
<tag>rest</tag>
<tag>api</tag>
<tag>service</tag>
</tags>
<authors>
<link rel="author" uri="/authors/id/22" />
<link rel="author" uri="/authors/id/18" />
</authors>
</book>
これで、このリソースから著者をたどることができます。フェッチする/books/by/author/id/18
と、次のようなものが得られます。
<books>
<book id="123">
<name>Hypermedia APIs</name>
<link rel="self" uri="/books/id/123" />
</book>
<book id="191">
<name>Chef Recipes for Rails Developers</name>
<link rel="self" uri="/books/id/191" />
</book>
<book id="220">
<name>Rails 4 Cookbook</name>
<link rel="self" uri="/books/id/220" />
</book>
<book id="292">
<name>Ruby 102</name>
<link rel="self" uri="/books/id/292" />
</book>
<book id="432">
<name>Semantic Architecture</name>
<link rel="self" uri="/books/id/432" />
</book>
<book id="501">
<name>Service Oriented Design</name>
<link rel="self" uri="/books/id/501" />
</book>
</books>
これも私にとってはうまくいっているようです。この uri テンプレート化の方法が良いかどうかにかかわらず、私の質問は、このようなリンクをたどるのがどれほど実用的かということです。
リソースの完全な詳細 (作成者の詳細を含む) が必要であることを考慮すると、サーバーに対して少なくとも 3 回の呼び出しを行う必要があります。繰り返しになりますが、コレクションについては、サーバーに対して大量の呼び出しを行う必要があります。はい、ここでリソースの拡張を利用できるかもしれませんが、すべてのクライアントが時間内に拡張されたリソースを使用するため、ハイパーメディア リンクを使用する必要はありません。
クライアントがリンクをトラバースできるようにすることで、多くのことが得られていることを理解しています (つまり、クライアントがリレーション ベースのリソース ディスカバリを構築する場合、API を変更しても最小限の影響を受けるか、リソース エンドポイント自体から最新のスキーマを取得する必要があります。等)。繰り返しになりますが、このアプローチの実用性、またはこのアプローチのパフォーマンスは、システムを殺します。
ハイパーメディア api の設計で何かを得ていないか、ハイパーメディア api は素晴らしいように聞こえますが、それは単なる理論的なアイデアであり、実用的なアイデアではないようです。
これについて何か考えはありますか?