Дизайн URL REST - несколько ресурсов в одном HTTP-вызове
Возможный дубликат:
Rails 3 Пользовательский маршрут, который принимает несколько идентификаторов в качестве параметра
Из того, что я понимаю, хороший URL-адрес REST для получения ресурса будет выглядеть следующим образом:
/resource/{id}
Проблема заключается в том, что мне часто приходится получать большое количество ресурсов из ресурсов в то же время и не хочу создавать отдельный HTTP файл вызовите для каждого из них.
Есть ли опрятный дизайн URL-адресов, который бы удовлетворял это или это просто не подходит для REST API?
Ответы
Ответ 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: по убыванию