ハイパーメディアの制約をアプリケーション状態のエンジン(HATEOAS)として受け入れる REST クライアントの実装を知っている人はいますか?
Sun Cloud APIは、それが文書化されている方法と、Ruby、Java、および Python の実装が進行中であるという趣旨の著者の声明から判断すると、有力な候補のようです。しかし、これまでのところ、コードの痕跡は見つかりませんでした。
私は何でも探しています - 部分的な実装でも役に立ちます。
ハイパーメディアの制約をアプリケーション状態のエンジン(HATEOAS)として受け入れる REST クライアントの実装を知っている人はいますか?
Sun Cloud APIは、それが文書化されている方法と、Ruby、Java、および Python の実装が進行中であるという趣旨の著者の声明から判断すると、有力な候補のようです。しかし、これまでのところ、コードの痕跡は見つかりませんでした。
私は何でも探しています - 部分的な実装でも役に立ちます。
最初に確認する必要があるのは、一般的な Web ブラウザーです。これは、HATEOAS を (少なくともある程度は) 採用するクライアントの標準です。
これがハイパーメディアの仕組みです。それはとても簡単なので、ほとんど苦痛です:
http://pigs-are-cool.org/
次に、2 つの用語が Web ブラウジング エクスペリエンスにどのように関連しているかを簡単に説明します。
したがって、HATEOAS は、Web ページから Web ページに移動したときに Web ブラウザーで何が起こるかを実際に説明しています。
リンクが埋め込まれた HTML ページは、いつでもブラウザに表示されるものを操作します
HATEOAS という用語は、このブラウジング体験を抽象化したものにすぎません。
RESTful クライアント アプリケーションのその他の例には、次のものがあります。
RESTful クライアント ソフトウェアの特徴:
<img src=
) いくつかは手動で (のように<a href=
) です。非常に多くの場合、それらはユーザーによって駆動され、GoogleBot などを除いて、正しく「ユーザー エージェント」と呼ぶことができます。
Restfulieは、HATEOAS を使用するクライアントとサーバーを構築できるようにすることを目的とした、Ruby、Java、および C# のフレームワークです。使っていませんが、面白そうです。
Java プロジェクトのコード例を次に示します。
Order order = new Order();
// place the order
order = service("http://www.caelum.com.br/order").post(order);
// cancels it
resource(order).getTransition("cancel").execute();
繰り返しますが、これが何をするのか、または実際にどれだけうまく機能するのかは正確にはわかりませんが、興味深いようです.
REST HTTP と HATEOAS の問題は、リンクを指定する共通の方法がないことです。そのため、サービス プロバイダーによって構造が変わる可能性があるため、リンクをたどるのが難しくなります。<link href="..." />
他の人はリンクの独自の構造を使用する人もいます。<book href="..." />
. リンクが定義された標準の一部である HTML やアトムとは異なります。
クライアントは、リンクの標準または従来の表現がない限り、メディアの種類がわからないため、表現内のリンクが何であるかを知ることができません
HATEOAS 設計原則 (REST も設計原則のセットです) は、各リソースが最大で 1 つの固定 URL を持つ必要があることを意味します。
関連する他のすべては、「ハイパーメディア」リンクを介してその URL から動的に検出できる必要があります。
ここでウィキペディアのスタブを開始しました
そんな中、Spring HATEOAS プロジェクトがあります。クライアント実装もあります: https://docs.spring.io/spring-hateoas/docs/current/reference/html/#client
Map<String, Object> parameters = new HashMap<>();
parameters.put("user", 27);
Traverson traverson = new Traverson(URI.create("http://localhost:8080/api/"), MediaTypes.HAL_JSON);
String name = traverson
.follow("movies", "movie", "actor").withTemplateParameters(parameters)
.toObject("$.name");