Подтвердить что ты не робот

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

У меня есть url для получения встреч для пользователя следующим образом:

/user/:userId/appointments

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

должно быть:

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

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

4b9b3361

Ответ 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.