“遅延ロード” RESTfulな方法で?
-
06-07-2019 - |
質問
このサービスを指定してホテルに関する情報を取得します:
> 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つの可能性があります。
- 毎回すべての属性を送信
- 要求に応じて属性を個別に送信(
/ {id} / a
、/ {id} / b
、/ {id} / biggie
) - お勧めのように、異常な属性を除くすべての属性を送信します。
1と2は統一されているので便利ですが、3はあなたの場合、または1つのデータにログイン資格情報が必要な場合などに意味があります。
(2には、すべての属性の名前を知る必要があるリクエスターとのより緊密な結合を必要とするという欠点もあります。)
所属していません StackOverflow