Implementing Filtering

1. Using Query Parameters for Filtering

PatternExample
Equality?status=active
Multi-value (OR)?status=active,pending
Negation?status!=cancelled
Existence?email=* or ?has=email

2. Implementing Multi-Field Filtering

Example: Combined Filters (AND)

GET /orders?status=paid&customerId=42&currency=USD&minTotal=100
LogicConvention
AND (default)Multiple distinct params
OR within fieldCSV: status=paid,shipped
Complex (nested)RSQL/FIQL or POST search endpoint

3. Implementing Comparison Operators

OperatorBracket StyleSuffix Style
Equalprice[eq]=100price=100
Not equalprice[ne]=100price__ne=100
Greater thanprice[gt]=100price__gt=100
GTEprice[gte]=100price__gte=100
Less thanprice[lt]=100price__lt=100
LTEprice[lte]=100price__lte=100
Inid[in]=1,2,3id__in=1,2,3
Likename[like]=%alice%name__like=alice
ParamUse
qUniversal search query
searchVerbose alternative
EnginesPostgreSQL FTS, Elasticsearch, Meilisearch, Algolia
TechniqueUse
Levenshtein distanceTypo tolerance
Trigrams (pg_trgm)Similarity matching in PostgreSQL
Phonetic (Soundex)"Smith" / "Smyth"
Elasticsearch fuzziness:AUTOBuilt-in fuzzy matching

6. Using Arrays in Filters

StyleExample
CSV?tags=red,blue,green
Repeated key?tag=red&tag=blue
Bracket notation?tags[]=red&tags[]=blue

7. Implementing Date Range Filtering

Example: Date Range

GET /orders?createdAt[gte]=2026-01-01&createdAt[lt]=2026-02-01
GET /orders?createdFrom=2026-01-01&createdTo=2026-02-01

8. Implementing Nested Field Filtering

PatternExample
Dot notation?address.city=NYC
Bracket?address[city]=NYC
Underscore?address_city=NYC

9. Handling Special Characters in Filters

CharacterEncoded
Comma in valueUse bracket array or URL-encode %2C
Ampersand%26
Equals%3D
Spaces%20 or +

10. Implementing Filter Validation

CheckAction
Unknown field400 Bad Request
Invalid value type400 + which field
Operator not supported on field400 with allowed list
SQL injection patternsUse ORM/parameterized queries

11. Documenting Filter Options

OpenAPI ElementDocuments
parametersEach filter param with type/enum
x-filterable-fieldsCustom extension for dynamic fields
ExamplesShow common queries in description