Вопрос по соглашениям REST: поиск информации, где нужно много параметров - PullRequest
3 голосов
/ 12 января 2011

У меня есть маршрут на моем сервере / register_contacts, который принимает в качестве параметров длинный массив идентификаторов, ищет, какие из этих идентификаторов зарегистрированы в базе данных, и возвращает это подмножество.

Какой метод HTTP долженэто будет?

В настоящее время это запрос GET, так как я подумал, что он что-то получает, но я также немного обеспокоен длинным массивом идентификаторов, который в итоге делает запрос к конечной точке, такой как:

www.server.com/registered_contacts?ids[2]=bob&ids[54]=jon&ids[23]=jack...etc. etc.

Можно утверждать, что на самом деле я не получаю удаленную «вещь», такую ​​как / зарегистрирован / контакты / 42, можно также утверждать, что это ресурс, который я не обновляю, не удаляю илисоздание ... так что уходит получение?

(у меня также есть одно беспокойство: заголовок становится больше, чем размер пакета, не уверен, станет ли это проблемой)

Ответы [ 2 ]

4 голосов
/ 12 января 2011

Предполагая, что вы не работаете с каким-то ограничением длины команды GET, которое существует, у вас все в порядке.

Другой механизм состоит в том, чтобы взять ваши критерии, POST его в ресурс «фильтра», изатем возьмите полученный URI из этого, а затем используйте этот URI в качестве аргумента для GET.

Create the filter:
POST /filter

ids[2]=bob......

Result:
HTTP/1.1 301 Moved Permanently
Location: /filter/1234

Use the filter:
GET /registerd_contacts?filter=http://example.com/filter/1234

Ваши фильтры - это ресурс первого класса, который вы можете CRUD, если хотите, или они могут "уйти""через день, или как хочешь.

2 голосов
/ 12 января 2011

Нет, GET - правильный метод.По сути, вы генерируете результат поиска на основе длинного списка критериев.Ваш метод (семантически говоря) идемпотентен, поэтому он не очень подходит для POST.

...