'REST API filter queries - handling OR operations

I am trying to create a nice helper class to parse some query parameters so they can be used to filter an array of data.

I am using the following syntax for my query parameters:

?filter[name,contains,string]=foo // name field contains the string "foo"

?filter[id,gte,number]=123 // item field is greater then or equal to 123

?filter[type,eq,string]=foo|bar // type field is equal to "foo" or "bar"

(you can also use , between the values to act as an AND operator, but on a single field, it doesn't have many use cases eg gt 1 AND 2 isn't a great filter)

These query params can be combined, eg

?filter[name,contains,string]=foo&filter[id,gte,number]=123

And this will act as an AND condition, meaning data is returned that matches both filters.

Great so far. But I want to implement an OR condition for multiple separate filters.

?filter[]=... is used for the actual filter query, so I can't really use that to set the OR condition.

I've tried finding REST API implementations that use somethig similar to this filtering syntax, the closest is Laravel, but the docs don't go into any details about it.

Hoping someone can point me to a good resource about REST API filtering/help me figure out a nice way to implement the OR condition.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source