質問

このサービスを指定してホテルに関する情報を取得します:

> GET /hotel/{id}

< HTTP/1.1 200 OK
< <hotel>
<   <a>aaa</a>
<   <b>aaa</b>
>   <biggie>aaa....I am 300K</biggie >
< </hotel>

問題は、 biggie が300Kであり、すべての応答でそれを返したくないことです。この値を遅延ロードするRESTfulな方法は何ですか?

2つのリソースを設定する必要があります:

> GET /hotel/{id}

< HTTP/1.1 200 OK
< <hotel>
<   <a>aaa</a>
<   <b>aaa</b>
< </hotel>

and ..

> GET /hotel/{id}/biggie

< HTTP/1.1 200 OK
< <biggie>
<   <val>aaa....I am 300K</val>
< </biggie>

そして、あなたは本当にそのデータが必要なときにのみ GET / hotel / {id} / biggie をリクエストしますか?

これは機能します。ただし、 biggie には特別なものはありませんが、大きなデータセットです。すべての属性は実際には単なる hotel の属性であるため、すべてを hotel レベルで保持する方が良いと思います。

役に立ちましたか?

解決

忘れないでください、ハイパーメディアはあなたの友達です。

GET /hotel/{id}

HTTP/1.1 200 OK
<hotel Id="99">
  <a>aaa</a>
  <b>aaa</b>
  <biggieLink href="/Hotel/99/Biggie"/>
</hotel>

またはあなたもできます

GET /hotel/{id}

HTTP/1.1 200 OK
<hotel Id="99">
  <a>aaa</a>
  <b>aaa</b>
  <biggieSynopsis href="/Hotel/99/Biggie">
    <title>Here is a a summary of biggie</title>
  </biggieSynopsis
</hotel>

他のヒント

2つのリソースとして設定すると動作しますが、それが気に入らない場合は、キャッシュの使用を検討できます。データの性質によっては、複数のリソースに分割するよりも実際に負荷を節約できる場合があります。

あなたの解決策は素晴らしいと思います。完全な答えはありませんが、次の3つの可能性があります。

  1. 毎回すべての属性を送信
  2. 要求に応じて属性を個別に送信( / {id} / a / {id} / b / {id} / biggie
  3. お勧めのように、異常な属性を除くすべての属性を送信します。

1と2は統一されているので便利ですが、3はあなたの場合、または1つのデータにログイン資格情報が必要な場合などに意味があります。

(2には、すべての属性の名前を知る必要があるリクエスターとのより緊密な結合を必要とするという欠点もあります。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top