2017-04-24 12 views
1

これはHATEOSとの最初の連絡先です。私はこのフォーマットを使用してサーバーと接続しなければならないフロントサイドクライアントアプリケーションを作成します。私はすべてのハイパーリンクを持つJSONパターンが関連するオブジェクトを参照しているのを見ました。HATEOSはサーバーまたはクライアントによって提供されますか?

私の質問は、クライアント側のアプリケーションからこれらのハイパーリンクを作成するか、これはサーバーのタスクですか?

答えて

2

リンクはサーバー側で生成されます。

アプリケーション状態と、リソースの状態をサーバで区別する必要があります。クライアントはアプリケーションの状態を処理します。サーバーはリソースの状態を処理します。

アプリケーション状態は、クライアントがタスクを完了するプロセスのどこにあるか(つまり、サーバーとの対話のどこにあるか)を決定します。

リソース状態は、サーバーが格納する永続的なデータの種類であり、単一のセッションの対話の期間を超えて続きます。

リソース自体の表現に加えて、そのリソースで次に何ができるのかをクライアントに伝えるメタデータ(JSON表現の「リンク」セクション)があります。実際にリソースの状態を変更するには、クライアントがサーバーによって生成された提供されたリンクの1つに従わなければなりません。

これらの概念を具体的に例示します。

サムネイルギャラリーを参照していて、サーバーからサムネイル番号23が送信された場合、クライアントはサーバーに「次へ」と言うことはできません。これは、サーバーがクライアントアプリケーションに以前に番号23を求められました。そして、接続された各クライアントの "コンテキスト"を維持する必要があります。代わりに、クライアントが明示的にギャラリーで進むためにサムネイル番号24を要求すると、サーバーはその負担から解放されます。サムネイルサービスへの2回の連続呼び出しの間に、サーバーは何も覚えていません。 「コンテキスト」(すなわち、アプリケーションの状態の関連部分)は、クライアント上に保持され、明示的にサーバに渡される。

以前の呼び出しで特定のサムネイルを表示していたことを必ずしも知っている必要はありません。このイメージの表現に加えて、サーバはあなたに対応するサムネイルにつながる "previous"と "next"というラベルの付いたリンクを送ることができるからです。サーバーがサムネイル23の表現を生成していた時点で、サーバーはユーザーの要求に関連するすべての情報を持っていました。あなたがリクエストしたサムネイルと、前後のサムネイルが何かを知っていました。したがって、HATEOAS表現で対応するリンクを生成することができます。

+0

ありがとうございました。そのような包括的な答えは期待していませんでした。 私はまだ1つの質問があります。たとえば、2つの種類のもの(たとえば、ユーザーアカウントとイベント)を表す2つのJSONオブジェクトがあるとします。私は、ユーザーがクライアント側でそのイベントで彼の存在を確認するとき、それらの2つの間に関係を追加したいと思います。クライアント側からこのリレーションを書き留めて、それをサーバーに送信するにはどうすればよいですか? – andrzej541

関連する問題