Сервис RESTful Spring с несколькими параметрами

Я создаю спокойную службу, которая должна принимать любое количество параметров вместо одного из приведенного ниже примера.

Предполагая следующую процедуру обслуживания

@RequestMapping("/start/id/{id}", RequestMethod.GET)
public void startService(@PathVariable String id) {...}

есть реализация клиента, основанная на RestTemplate

restTemplate.getForObject("/start/id/{id}", null, id);

Вопрос: Но учитывая, что это могут быть тысячи ids, какие успокаивающие подходы у меня есть для отправки всех параметров в одном запросе с помощью _ 5_? Я видел предложения

  • Добавить тело запроса в запрос GET - это невозможно с _ 6_?
  • Используйте разделитель в идентификаторе (например, id1|id2|....|idn) - похоже на хак
  • Сначала введите параметры, затем выполните GET для ссылки на идентификаторы - двойные запросы кажутся не интуитивно понятными
  • Добавление нескольких параметров URL (?id=foo&id=bar&.....&id=foobar)

Я знаю похожие вопросы (call-a-restful-service-with-many-parameters, как-создать-остальные-URL-адреса-без-глаголов, можешь-построить -a-true-restful-service-that-take-many-parameters) был задан раньше, но мне было трудно найти удовлетворительный ответ или, по крайней мере, ответ, основанный на _ 9_.


person Johan Sjöberg    schedule 20.12.2011    source источник


Ответы (2)


Вы можете использовать параметр запроса для всех идентификаторов:

/search?ids=1,2,3,4,5,6,7

Затем разметьте запятую и выполните поиск. Помните, что вы будете ограничены максимальной длиной URL-адреса, если вы зададите это как параметр строки запроса GET.

person Perception    schedule 20.12.2011

Я не думаю, что какая-либо часть дизайна RESTful утверждает, что ваша структура URL-адресов должна иметь возможность разрешать целые коллекции. Ваши первое (параметр запроса) и третье (параметр url) предложения, вероятно, будут лучшими.

Я бы рекомендовал первое. Я уверен, что это разрешено в resttemplate. Просматривая предоставленную вами документацию, просто реализуйте один из методов публикации. Каждый из них принимает запрос в качестве параметра. Я уверен, что внутри есть какая-то реализация метода getRequestParameters(), который вы можете использовать для синтаксического анализа json / xml из тела запроса, содержащего ваши идентификаторы.

Или, что еще лучше, как связаны все эти идентификаторы? У всех ли у них есть общий родительский ресурс? Если да, то вы могли бы (и, вероятно, должны) сделать что-нибудь вроде ...

/commonparent/{parentId}

А затем в обработчике запросов запросите все идентификаторы и действуйте как обычно.

person Dave    schedule 20.12.2011