# API Mocking

> สร้าง mock APIs สำหรับ frontend development และ testing โดยไม่ต้องพึ่ง backend จริง

- Skill: `majiayu000/api-mocking` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/api-mocking`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/api-mocking/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/api-mocking

---


# 🎭 API Mocking Skill

---
name: api-mocking
description: Create mock APIs for frontend development and testing without backend dependencies
---

## 🎯 Purpose

สร้าง mock APIs สำหรับ frontend development และ testing โดยไม่ต้องพึ่ง backend จริง

## 📋 When to Use

- Frontend before backend ready
- Integration testing
- Offline development
- Demo/presentations
- Rate limiting avoidance

## 🔧 Mocking Methods

### 1. MSW (Mock Service Worker)
```typescript
// mocks/handlers.ts
import { http, HttpResponse } from 'msw';

export const handlers = [
  http.get('/api/users', () => {
    return HttpResponse.json([
      { id: 1, name: 'John' },
      { id: 2, name: 'Jane' },
    ]);
  }),

  http.post('/api/users', async ({ request }) => {
    const data = await request.json();
    return HttpResponse.json({ id: 3, ...data }, { status: 201 });
  }),
];
```

```typescript
// mocks/browser.ts
import { setupWorker } from 'msw/browser';
import { handlers } from './handlers';

export const worker = setupWorker(...handlers);
```

### 2. JSON Server
```bash
npm install -g json-server

# db.json
{
  "users": [
    { "id": 1, "name": "John" }
  ],
  "posts": [
    { "id": 1, "title": "Hello", "userId": 1 }
  ]
}

json-server --watch db.json --port 3001
```

### 3. Local Mock Functions
```typescript
const mockApi = {
  users: {
    getAll: () => Promise.resolve([
      { id: 1, name: 'John' }
    ]),
    getById: (id: string) => Promise.resolve({ id, name: 'John' }),
    create: (data: any) => Promise.resolve({ id: Date.now(), ...data }),
  }
};

// Use in dev
const api = process.env.NODE_ENV === 'development' ? mockApi : realApi;
```

## 📊 Mock Data Generation

### Faker.js
```typescript
import { faker } from '@faker-js/faker';

function generateUsers(count: number) {
  return Array.from({ length: count }, () => ({
    id: faker.string.uuid(),
    name: faker.person.fullName(),
    email: faker.internet.email(),
    avatar: faker.image.avatar(),
  }));
}
```

### Thai Mock Data
```typescript
const thaiMockData = {
  names: ['สมชาย', 'สมหญิง', 'วิชัย', 'วันดี'],
  addresses: ['กรุงเทพฯ', 'เชียงใหม่', 'ขอนแก่น'],

  getRandomName: () => thaiMockData.names[Math.floor(Math.random() * thaiMockData.names.length)],
};
```

## 📝 Mock Response Templates

### Success Response
```typescript
{
  data: { /* actual data */ },
  success: true,
  message: 'Operation successful'
}
```

### Error Response
```typescript
{
  error: {
    code: 'VALIDATION_ERROR',
    message: 'Invalid input',
    details: { field: 'email', issue: 'Invalid format' }
  },
  success: false
}
```

### Paginated Response
```typescript
{
  data: [ /* items */ ],
  pagination: {
    page: 1,
    limit: 10,
    total: 100,
    totalPages: 10
  }
}
```

## ✅ Mocking Checklist

- [ ] All endpoints covered
- [ ] Realistic data
- [ ] Error scenarios
- [ ] Edge cases
- [ ] Loading delays (for UX)
- [ ] Thai content (if Thai app)

## 🔗 Related Skills

- `api-design` - Design APIs
- `testing` - Test with mocks
- `api-client-generator` - API clients

