How do you design filtering, sorting and sparse fieldsets?
Expose them as query parameters with a clear convention:
GET /articles?status=published&author=42&sort=-created_at&fields=id,title
- Filtering: one parameter per field, or a documented DSL for ranges (
price[gte]=10). Only allow filtering on indexed, allow-listed columns to avoid full scans. - Sorting: a
sortparameter with comma-separated fields where a leading-means descending. Whitelist sortable columns because the value may reach anORDER BY. - Sparse fieldsets: a
fieldsparameter to trim payload size, useful for mobile clients and bandwidth-sensitive integrations.
Never interpolate user input directly into SQL; map names to known columns. Cap the number of filters and sort keys, and cache the allowed combinations. These parameters compose naturally with pagination and projection, and are usually preferable to building bespoke endpoints for every view.