---
name: API Response Optimization
slug: api-response-optimization
category: DevOps
description: API Response Optimization reduces payload sizes, adds caching headers, and enables compression to improve API response times and bandwidth use. Use it when tuning endpoints for speed or efficient data transfer.
github: "https://github.com/secondsky/claude-skills/tree/main/plugins/api-response-optimization/skills/api-response-optimization"
language: TypeScript
stars: 214
forks: 31
install: "npx degit https://github.com/secondsky/claude-skills/tree/main/plugins/api-response-optimization/skills/api-response-optimization ~/.claude/skills/api-response-optimization"
installs_to: ~/.claude/skills/api-response-optimization
source_path: plugins/api-response-optimization/skills/api-response-optimization/SKILL.md
collection_size: 24
category_size: 920
collection_url: "https://dirskills.com/collections/secondsky/claude-skills"
added: 2026-09-04T05:25:54.764Z
last_synced: 2026-09-04T05:25:54.764Z
canonical_url: "https://dirskills.com/skills/api-response-optimization"
---

# API Response Optimization

API Response Optimization reduces payload sizes, adds caching headers, and enables compression to improve API response times and bandwidth use. Use it when tuning endpoints for speed or efficient data transfer.

**Install:**

```bash
npx degit https://github.com/secondsky/claude-skills/tree/main/plugins/api-response-optimization/skills/api-response-optimization ~/.claude/skills/api-response-optimization
```

## README

# API Response Optimization

Reduce payload sizes, implement caching, and enable compression for faster APIs.

## Sparse Fieldsets

```javascript
// 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 Caching Headers

```javascript
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);
});
```

## Response Compression

```javascript
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
}));
```

## Performance Targets

| Metric | Target |
|--------|--------|
| Response time | <100ms (from 500ms) |
| Payload size | <50KB (from 500KB) |
| Server CPU | <30% (from 80%) |

## Optimization Checklist

- [ ] Remove sensitive/unnecessary fields from responses
- [ ] Implement sparse fieldsets
- [ ] Add ETag/Last-Modified headers
- [ ] Enable gzip/brotli compression
- [ ] Use pagination for collections
- [ ] Eager load to prevent N+1 queries
- [ ] Monitor with APM tools

## Best Practices

- Cache immutable resources aggressively
- Use short TTL for frequently changing data
- Invalidate cache on writes
- Compress responses >1KB
- Profile before optimizing
