Передача массива в GET для вызова REST
У меня есть url для получения встреч для пользователя следующим образом:
/user/:userId/appointments
Как должен выглядеть URL-адрес, если я хочу получать встречи для нескольких пользователей?
должно быть:
/appointments?users=1d1,1d2..
Спасибо,
Крис.
Ответы
Ответ 1
Коллекции - это ресурс, так что/встречи в порядке как ресурс.
Коллекции также обычно предлагают фильтры через querystring, который по сути является тем, что являются пользователями = id1, id2....
Итак,
/appointments?users=id1,id2
отлично в качестве фильтрованного ресурса RESTful.
Ответ 2
Я думаю, что лучше использовать сериализацию ваших параметров вызова REST, обычно с помощью JSON-кодирования:
/appointments?users=[id1,id2]
или даже:
/appointments?params={users:[id1,id2]}
Затем вы некодируете их на сервере. Это даст вам большую гибкость в долгосрочной перспективе.
Просто убедитесь, что URLEncode params также перед отправкой!
Ответ 3
Другой способ сделать это, который может иметь смысл в зависимости от вашей архитектуры сервера/рамки выбора, - повторять один и тот же аргумент снова и снова. Что-то вроде этого:
/appointments?users=id1&users=id2
В этом случае я рекомендую использовать имя параметра в единственном числе:
/appointments?user=id1&user=id2
Это поддерживается изначально такими фреймворками, как Jersey (для Java). Посмотрите этот вопрос для более подробной информации.
Ответ 4
/appointments?users=1d1,1d2..
в порядке. Это в значительной степени ваш единственный разумный вариант, поскольку вы не можете пройти в тело с GET.
Ответ 5
Вместо использования 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.