Среди информации по построению REST API встречаются две рекомендации на тему сортировки и фильтрации. Сортировку делать вот так:
GET /users?sort=-created_at,username
Сортируем по убыванию по дате создания и по имени пользователя в алфавитном порядке.
Фильтры делать вот так:
GET /tickets?status=open&assignee=123
Получаем открытые тикеты, назначенные на пользователя с ID=123.
Вроде всё красиво, но что если у очередного ресурса появится поле sort
? GET-параметр уже зарезервирован для сортировки, использовать его для фильтрации не получается. Выхода два: либо заставить пользователя никогда не использовать поле sort
(а к нему со временем добавится like
и ещё что-нибудь) либо ввести для фильтрации отдельный параметр filter
. Значение лучше всего описать в формате JSON: не придётся заботиться о специальных правилах экранирования, да и поддержка его есть во всех клиентах.
GET /tickets?filter={"status": "open", "assignee": 123}
В случае отдельного параметра, хоть синтаксис и не настолько интуитивен, конфликт имён исключается.