Как грамотно реализовать фильтрацию в запросах API?
Дано:
Некие записи в БД, у каждой из которых есть булевские свойства A и B.
Хочу дать пользователю выводить множества
A+B
A+неB
неA+B
неA+неB
неопределенные A и B (в БД они пустые)
в любом наборе, т.е. попросит например пользователь (A+B) +(неA+B) + неопределенные, надо вывести все три множества.
Вопрос - как бы это реализовать в GET запросе, чтобы выгружать эти данные одним запросом, а не по числу требуемых множеств, и чтобы если появится третье... десятое подобное свойство , не потребовалось всё значительно ломать?
Пока на ум приходят страшные вещи, что-то типа запихнуть массив из массивов в GET запрос, только не знаю как:) Типа [[A=true, B=true],[A=false, B=true],[A=notset, B=notset]]
Подскажите, может какие-то идеи, или как эту реализовать в GET запросе?
Напишите маленький DSL и передавайте его в текстовом виде в GET-параметре query.
Если не обращать внимания на запах (не делайте так никогда), можно прям
GET /objects/?query=WHERE A AND B OR NOT A AND B OR A IS NULL OR B IS NULL