4

(注:URIを使用してリソースを識別するRESTサービスを想定していますが、これは厳密にはRESTの制約ではないことを認識しています)

HATEOASの私の理解から、クライアントは、最初のエントリポイントを除いて、サービスによって提供されるURI構造について何も想定すべきではありません(代わりに、サーバーによって構造化された方法で提供されたURIのみを使用する必要があります)。これは、クライアントが最新のリクエストによって指定されたURIのみを使用できることを意味しますか、それともクライアントは同じセッションからの以前のリクエストで受信したURIを追跡できますか?前者の場合、後者はどのREST制約に違反しますか?

URIを追跡する2つの例:

  1. 写真表示アプリケーションでは、写真のリストをトラバースして、一部のURIをリストに保存します。次に、「モザイク」機能に移動し、保存されたURIからすべての写真をモザイクにロードします。
  2. 商品のリストを閲覧して、クライアント側のショッピングカートに追加します。完了したら、Ordersリソースに新しい要素を作成し、URIで指定された順序で製品を作成します。
4

1 に答える 1

3

オープニングラインの意味がわかりません。

注意:URIを使用してリソースを識別するRESTサービスを想定していますが、これは厳密にはRESTの制約ではないことを認識しています

ハイパーリンクはURIである必要はないということですか?または、ハイパーリンクがリソースを指す必要はありませんか?前者は技術的には真実ですが、インターネット上では、URIはハイパーリンクの唯一の形式であるため、完全に異なるものについて考えているのでない限り、それらはURIです。RESTがURIがリソースを識別することを要求しないと言っているなら、これはちょうど間違っています。それはまさに彼らがRESTfulAPIで識別するものです。いつも。

とにかく、あなたの質問に進んでください:

これは、クライアントが最新のリクエストによって指定されたURIのみを使用できることを意味しますか、それともクライアントは同じセッションからの以前のリクエストで受信したURIを追跡できますか?

はい、クライアントは以前の応答をキャッシュできます。それらが「新鮮」である場合(Expiresまたはmax-ageヘッダーごと)、クライアントはそれらをすぐに使用できます。それらが「古くなっている」(max-age / Expiry timeを超えている)場合、クライアントは条件付きリクエスト(If-Modified-Sinceなど)を使用してリソースを再リクエストできますが、そうする必要はありません。

どちらの例もREST違反を構成していません。それどころか、どちらもシステムのシンプルさの素晴らしい例です。

于 2012-11-30T16:31:00.420 に答える