В настоящее время мы строим API RESTful. Теперь, это вопрос того, что лучший способ борьбы с фильтрацией.
У нас есть /products
. /products
возвращает все данные, к которым у вас есть доступ. Теперь скажем, вы хотите, чтобы продукты, в которых description
точно соответствует "Без описания". Вы получите /products?description=No+description
.
Теперь, в идеале, у нас будет больше параметров фильтра. Показывать только товары, где запас больше или равен 1, но меньше 10. Показывать только товары, где имя заканчивается black
или начинается с white
. Какова наилучшая практика? Будем ли мы использовать логические операторы в URL-адресе, как нам избежать диких карт?
Текущее состояние дел:
/products?product_name=%25black
найдет все продукты с именами, заканчивающимися на черном.
или
/products?product_name=white%25
найдет все продукты с именами, начинающимися с белого.
% 25 - это закодированная форма %
. Все идет нормально.
Но что, если кто-то хочет найти продукт, где имя соответствует буквенному символу %
? Или хочет найти продукты с запасом? Было бы лучше представить
min_stock
и max_stock
, или возможно (или мы даже хотим?) использовать логические операторы (?stock=>=1&stock=<=5
). Существует ли стандарт для обработки URL-адресов или подобных ситуаций?
Мы слишком задумываемся? Является ли это возможным? Должны ли мы не фильтровать наш конец, но позволить пользователям самим понять это?
Парадигма REST - это ресурсы ressources (все, к чему вы обращаетесь, это ressource) и понятность человека. Вот почему вы делаете свой URL-адрес множественного числа.
С учетом сказанного, я думаю, если вы хотите, чтобы фильтровать двумя различными способами (с =
, like
, регулярное выражение...) у вас есть два possibilitiees:
product_name_exact
, product_name_like
, product_name_regex
. Это похоже на python.django способ фильтрации, и он довольно изящный;query
, а затем query_mode
это то, как работает bing api.product_name_like=black
?
\` before any
%`.