Builds flexible API filtering and sorting systems with query parameter parsing, operators like gte/lte/in, validation, and security whitelists. For search endpoints, data grids, dynamic query APIs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/api-filtering-sorting:api-filtering-sortingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build flexible filtering and sorting systems that handle complex queries efficiently.
Build flexible filtering and sorting systems that handle complex queries efficiently.
GET /products?category=electronics&price[gte]=100&price[lte]=500&sort=-price,name
const allowedFilters = ['category', 'status', 'price', 'createdAt'];
const allowedSorts = ['name', 'price', 'createdAt'];
app.get('/products', async (req, res) => {
const filter = {};
const sort = {};
// Parse filters
for (const [key, value] of Object.entries(req.query)) {
if (key === 'sort') continue;
const match = key.match(/^(\w+)\[(\w+)\]$/);
if (match) {
const [, field, operator] = match;
if (!allowedFilters.includes(field)) continue;
filter[field] = { [`$${operator}`]: parseValue(value) };
} else if (allowedFilters.includes(key)) {
filter[key] = value;
}
}
// Parse sort
if (req.query.sort) {
for (const field of req.query.sort.split(',')) {
const direction = field.startsWith('-') ? -1 : 1;
const name = field.replace(/^-/, '');
if (allowedSorts.includes(name)) sort[name] = direction;
}
}
const products = await Product.find(filter).sort(sort);
res.json({ data: products });
});
function parseValue(value) {
if (value === 'true') return true;
if (value === 'false') return false;
if (!isNaN(value)) return Number(value);
return value;
}
| Operator | Meaning | Example |
|---|---|---|
| eq | Equals | ?status=active |
| ne | Not equals | ?status[ne]=deleted |
| gt/gte | Greater than | ?price[gte]=100 |
| lt/lte | Less than | ?price[lte]=500 |
| in | In array | ?status[in]=active,pending |
| like | Contains | ?name[like]=phone |
npx claudepluginhub secondsky/claude-skills --plugin api-filtering-sortingGuides designing filter and sort query parameters for list endpoints, covering operator syntax, injection prevention, and sort conventions.
Adds search, sort, date range, boolean, enum, numeric, IRI, and free-text filters to API Platform collections using the QueryParameter approach. Covers migration from legacy #[ApiFilter] code.
Implements API Platform filters including v4 Parameters API (QueryParameter) and legacy #[ApiFilter] for search, date, range, boolean, and custom filtering in Symfony projects.