Подтвердить что ты не робот

Дизайн URL REST - несколько ресурсов в одном HTTP-вызове

Возможный дубликат:
Rails 3 Пользовательский маршрут, который принимает несколько идентификаторов в качестве параметра

Из того, что я понимаю, хороший URL-адрес REST для получения ресурса будет выглядеть следующим образом:

/resource/{id}

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

Есть ли опрятный дизайн URL-адресов, который бы удовлетворял это или это просто не подходит для REST API?

4b9b3361

Ответ 1

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

GET /Customer/1212/RecentPurchases

Создание составных URL-адресов, которые содержат много идентификаторов в одном URL-адресе, ограничивает преимущества кэшей и добавляет излишнюю сложность для сервера и клиента. Когда вы загружаете веб-страницу с кучей графики, вы не видите

GET /MyPage/image1.jpg;image2.jpg;image3.jpg

Это просто не стоит хлопот.

Ответ 2

Я бы сказал /resources/foo,bar,baz (разделитель может варьироваться в зависимости от характера идентификаторов и ваших эстетических предпочтений "foo+bar+baz", "foo:bar:baz" и т.д.). Выглядит немного "семантически" более аккуратно, чем foo/bar/baz ( "baz of bar foo"?)

Если идентификаторы ресурсов являются числовыми, возможно, даже с ярлыком диапазона, например /resources/1,3,5-9,12

Или, если вам нужно запрашивать не только ресурсы с конкретными идентификаторами, но и по группе ресурсов, имеющих определенные свойства, возможно, что-то вроде /resources/state=complete/size>1GiB/!active/...

Ответ 3

В прошлом я использовал что-то вроде этого.

/resources/a/d/

и это будет возвращать между x и Y список.

что-то вроде

<resources>
  <resource>a</resource>
  <resource>b</resource>
  <resource>c</resource>
  <resource>d</resource>
</resources>

вы также можете добавить более сложные поисковые запросы в URL-адрес, относящийся к тому, что представляет ресурс.

Ответ 4

возможно, вы могли бы попробовать

[GET]/покупки/пользователя: 123; предел: 30; sort_date: по убыванию