Передача массива в GET для вызова REST

у меня есть url-адрес для получения встреч для такого пользователя:

/user/:userId/appointments

как должен выглядеть url, если я хочу получить встречи для нескольких пользователей?

должно быть:

/appointments?users=1d1,1d2..

спасибо, Крис.

5 ответов


коллекции-это ресурс, поэтому / назначения хороши как ресурс.

коллекции также обычно предлагают фильтры через строку запроса, которая по существу является тем, что users=id1, id2... есть.

и

/appointments?users=id1,id2 

отлично подходит как отфильтрованный ресурс RESTful.


Я думаю, что лучше сериализовать параметры вызова REST, обычно с помощью JSON-кодирования:

/appointments?users=[id1,id2]

или еще:

/appointments?params={users:[id1,id2]}

затем вы un-encode их на сервере. Это даст вам больше гибкости в долгосрочной перспективе.

просто убедитесь, что URLEncode параметры, а перед отправкой их!


другой способ сделать это, который может иметь смысл в зависимости от вашей архитектуры сервера/структуры выбора, - повторять один и тот же аргумент снова и снова. Что-то вроде этого:--3-->

/appointments?users=id1&users=id2

в этом случае я рекомендую использовать имя параметра в единственном числе:

/appointments?user=id1&user=id2

это поддерживается изначально фреймворками, такими как Jersey (для Java). Взгляните на этот вопрос для получения более подробной информации.


/appointments?users=1d1,1d2.. 

это нормально. Это в значительной степени ваш единственный разумный вариант, так как вы не можете пройти в теле с GET.


вместо использования http GET используйте http POST. И JSON. Или XML

вот как будет выглядеть ваш поток запросов на сервер.

POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)

{users: [user:{id:id1}, user:{id:id2}]}

или в XML

POST /appointments HTTP/1.0
Content-Type: application/json
Content-Length: (calculated by your utility)

<users><user id='id1'/><user id='id2'/></users>

вы, безусловно, можете продолжать использовать GET, как вы предложили, так как это, безусловно, проще.

/appointments?users=1d1,1d2

что означает, что вам придется очень просто хранить свои структуры данных.

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

поэтому, если вы не можете сохранить свою структуру данных простой, я призываю вас принять структуру передачи данных. Если ваши запросы основаны на браузере, обычной практикой в отрасли является JSON. Если ваши запросы сервер-сервер, то XML является наиболее удобной платформой.

в jQuery

Если ваш клиент является браузером, и вы не используете GWT, вы должны рассмотреть возможность использования jQuery REST. Google на RESTful сервисах с jQuery.