mcpField
A
api-response-optimization

api-response-optimization

github.com/secondsky開発242429 回インストール5 週間前に更新
リポジトリ

api-response-optimization について

API のレスポンスサイズ削減と配信効率の改善を扱う開発スキルです。フィールド選択、HTTP キャッシュヘッダー、レスポンス圧縮を解説します。

主な機能

  1. 01クライアント指定のレスポンスフィールド
  2. 02ETag による条件付きレスポンス
  3. 03HTTP レスポンス圧縮
  4. 04キャッシュとページネーションの実践

活用シーン

  1. 01クライアントに返すフィールドの削減
  2. 02変更のないデータの再転送回避
  3. 03大きな API レスポンスの圧縮

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill api-response-optimization

インストール後、Claude Code で/api-response-optimizationを入力して読み込まれたか確認します。

詳細

API レスポンスの最適化

ペイロードサイズを削減し、キャッシュを実装して、圧縮を有効にすることで API を高速化します。

スパースフィールドセット

// Allow clients to select fields: GET /users?fields=id,name,email
app.get('/users', async (req, res) => {
  const fields = req.query.fields?.split(',') || null;
  const users = await User.find({}, fields?.join(' '));
  res.json(users);
});

HTTP キャッシュヘッダー

app.get('/products/:id', async (req, res) => {
  const product = await Product.findById(req.params.id);
  const etag = crypto.createHash('md5').update(JSON.stringify(product)).digest('hex');

  if (req.headers['if-none-match'] === etag) {
    return res.status(304).end();
  }

  res.set({
    'Cache-Control': 'public, max-age=3600',
    'ETag': etag
  });
  res.json(product);
});

レスポンス圧縮

const compression = require('compression');

app.use(compression({
  filter: (req, res) => {
    if (req.headers['x-no-compression']) return false;
    return compression.filter(req, res);
  },
  level: 6  // Balance between speed and compression
}));

パフォーマンス目標

指標目標
レスポンス時間<100ms(500ms から短縮)
ペイロードサイズ<50KB(500KB から削減)
サーバー CPU<30%(80% から削減)

最適化チェックリスト

  • レスポンスから機密情報や不要なフィールドを削除する
  • スパースフィールドセットを実装する
  • ETag/Last-Modified ヘッダーを追加する
  • gzip/brotli 圧縮を有効にする
  • コレクションにページネーションを使用する
  • N+1 クエリを防ぐために Eager Load を使用する
  • APM ツールで監視する

ベストプラクティス

  • 変更されないリソースは積極的にキャッシュする
  • 頻繁に変更されるデータには短い TTL を使用する
  • 書き込み時にキャッシュを無効化する
  • 1KB を超えるレスポンスを圧縮する
  • 最適化の前にプロファイリングする

コメント