2015-01-28 1 views
0

Я работаю над сервисом веб-API для нашего веб-приложения (текущий проект). Один контроллер в веб-API будет отвечать за получение списка объектов определенного типа. Все идет нормально. Проблема в том, что у нас есть запрос на фильтрацию списка на основе критериев поиска. Этот критерий поиска/фильтра имеет около десятка различных параметров, некоторые из которых могут быть нулевыми. Поэтому я решил создать пользовательский класс (назовем его «EntityFilterCriteria»), и я создаю его на стороне веб-приложения с любыми полями фильтрации, которые вводит пользователь (я оставляю те, которые пользователь не вводит в значение null). Теперь как передать этот объект методу веб-API? Я не хочу создавать URL со всеми параметрами, потому что это будет огромный URL-адрес, а некоторые параметры могут отсутствовать. Я не могу иметь тело в команде GET HTTP для сериализации объекта EntityFilterCriteria, так что я использую? ПОСЛЕ? Это не POST, потому что ничего не обновляется на стороне сервера. Это действительно ПОЛУЧИТЬ, как в «получить мне все записи, соответствующие этим критериям поиска». Каков общий подход в таких ситуациях?Методы веб-API с множеством параметров

Спасибо, Эдди

ответ

0

сериализовать класс JSON и отправить его на сервер, строка JSON будет ваш пост тела. Как только он будет опубликован, вы можете затем десериализовать класс с той же подписью. Большинство языков имеют встроенную поддержку или бесплатные сторонние модули, которые могут сделать это за вас.

+0

Спасибо, Джон. Я ценю ваш комментарий. Два одинаковых мнения в значительной степени разрешили это для меня. POST это. – Eddie

0

Ну, первоначальная опасность использования GET для такого запроса заключается в том, что самый длинный URL-адрес, который вы можете отправить, который должен работать на всех веб-браузерах и серверах, составляет около 1400 байт.

Лично я хотел бы использовать JSON для кодирования всех ваших параметров фильтра и отправки их на сервер в теле команды POST из-за отсутствия ограничения размера на отправленные данные.

Хотя существует семантическая разница между командами GET и POST, которые были настроены, когда HTTP RFC были написаны несколько десятилетий назад, эти десятилетия практического использования значительно изменились (так же, как и никто не использует PUT или DELETE)

+0

Спасибо, Дамиан. Вы, кажется, согласны с ответом Джона ниже. Я сделаю POST. – Eddie

0

Я не вижу недостатков в использовании метода POST для выполнения вашего запроса и получения результата. Например, ElasticSearch использует этот подход для выполнения запросов к базе данных. См. Эту ссылку, например: http://exploringelasticsearch.com/searching_data.html. В REST POST не требуется для обновления данных.

Надеюсь, это поможет. Thierry