api-filtering-sorting について
API 開発者向けに、フィルタリングとソートの設計方法をまとめたスキルです。演算子、フィールドの許可リスト、入力検証、クエリの安全対策を扱います。
主な機能
- 01一致・範囲フィルター演算子
- 02複数フィールドのソート構文
- 03フィールド許可リストと入力検証
- 04クエリ複雑度とインジェクション対策
活用シーン
- 01商品 API へのフィルター追加
- 02複数フィールドによる結果のソート
- 03ユーザー指定クエリフィールドの制限
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill api-filtering-sortingインストール後、Claude Code で/api-filtering-sortingを入力して読み込まれたか確認します。
詳細
API のフィルタリングとソート
複雑なクエリを効率的に処理できる、柔軟なフィルタリングとソートのシステムを構築します。
クエリパラメータの構文
GET /products?category=electronics&price[gte]=100&price[lte]=500&sort=-price,name
実装(Node.js)
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;
}
フィルター演算子
| 演算子 | 意味 | 例 |
|---|---|---|
| eq | 等しい | ?status=active |
| ne | 等しくない | ?status[ne]=deleted |
| gt/gte | より大きい | ?price[gte]=100 |
| lt/lte | より小さい | ?price[lte]=500 |
| in | 配列に含まれる | ?status[in]=active,pending |
| like | 含む | ?name[like]=phone |
セキュリティ
- 許可するフィルターフィールドをホワイトリストに登録します
- フィールドごとに入力型を検証します
- 頻繁にフィルタリングされる列にインデックスを付けます
- クエリの複雑さを制限します
- SQL/NoSQL インジェクションを防止します
ベストプラクティス
- 一般的な演算子をサポートします
- フィルターの選択肢リストをキャッシュします
- クエリのパフォーマンスを監視します
- 適切なデフォルト値を設定します
コメント
Markdown 対応