Как "ленивая загрузка" RESTful способом? - PullRequest
4 голосов
/ 26 октября 2009

Предоставляем эту услугу для получения информации об отеле:

> GET /hotel/{id}

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

Проблема в том, что biggie равен 300 КБ, и мы не хотим возвращать его при каждом ответе. Что такое RESTful способ ленивой загрузки этого значения?

Должны ли мы создать два ресурса:

> GET /hotel/{id}

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

и ..

> GET /hotel/{id}/biggie

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

И вы запрашиваете GET /hotel/{id}/biggie только тогда, когда вам действительно нужны эти данные?

Это будет работать .. хотя в biggie нет ничего особенного, кроме того, что это большой набор данных. Я думаю, что лучше держать все на уровне hotel, поскольку все атрибуты на самом деле являются просто атрибутами hotel.

Ответы [ 3 ]

13 голосов
/ 26 октября 2009

Не забывайте, гипермедиа - ваш друг.

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>
3 голосов
/ 26 октября 2009

Настройка его как двух ресурсов будет работать, но если вам это не нравится, вы можете изучить использование кэширования; в зависимости от характера данных это может сэкономить больше нагрузки, чем разделение на несколько ресурсов.

1 голос
/ 26 октября 2009

Я думаю, что ваше решение в порядке. Идеального ответа нет, но есть три варианта:

  1. Отправить все атрибуты, каждый раз
  2. Отправка атрибутов индивидуально по запросу (/{id}/a, /{id}/b, /{id}/biggie)
  3. Отправьте все атрибуты, КРОМЕ необычных, как вы предлагаете.

1 и 2 хороши тем, что они одинаковы, но 3 имеет смысл в вашем случае, или в случае, когда один фрагмент данных требует, например, учетные данные для входа.

(2 также имеет недостаток, заключающийся в необходимости более тесной связи с запросчиком, который должен знать имя каждого атрибута.)

...