Передача массива в 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.