Как создать Mock API для тестирования: полное руководство

Нужно создать mock API для тестирования, но не знаете с чего начать? В этом руководстве вы узнаете 3 способа создать mock API за 5-30 минут с примерами кода для Node.js, Python и React. К концу статьи вы сможете запустить свой собственный mock API и начать разработку независимо от backend.

📋 Содержание

  1. Что такое Mock API и зачем он нужен?
  2. Способ 1: LightBox API (облачный, 5 минут)
  3. Способ 2: Mockoon (локальный, 10 минут)
  4. Способ 3: JSON Server (минималистичный, 1 минута)
  5. Примеры использования в коде
  6. Сравнение методов
  7. Best Practices при создании Mock API
  8. FAQ: Часто задаваемые вопросы

🎯 Что такое Mock API и зачем он нужен?

Mock API (мок API) — это имитация реального API, которая возвращает заранее определенные ответы на HTTP запросы. Это позволяет разработчикам работать без зависимости от реального backend сервера.

✅ Когда нужен Mock API:

Типичные сценарии использования

Вот реальные ситуации, когда mock API спасает время и нервы:

🚀 Способ 1: LightBox API (облачный, 5 минут)

LightBox API — облачный сервис для создания mock API без установки и настройки. Идеально подходит для команд и проектов, где нужен общий доступ к mock endpoints.

Шаг 1: Регистрация (30 секунд)

Зарегистрируйтесь на lightboxapi.ru — email и пароль, никаких подтверждений.

Шаг 2: Создайте workspace (1 минута)

Workspace — это ваш проект. Создайте его и получите уникальный URL для mock API:

https://api.lightboxapi.ru/mock/your-workspace

Шаг 3: Добавьте endpoints (2 минуты)

В веб-интерфейсе создайте endpoint. Например, GET /users:

{
  "method": "GET",
  "path": "/users",
  "response": {
    "status": 200,
    "headers": {
      "Content-Type": "application/json"
    },
    "body": [
      {
        "id": 1,
        "name": "Иван Петров",
        "email": "ivan@example.com",
        "role": "admin"
      },
      {
        "id": 2,
        "name": "Мария Сидорова",
        "email": "maria@example.com",
        "role": "user"
      }
    ]
  }
}

Шаг 4: Используйте в коде (30 секунд)

// Замените URL на ваш mock API
const API_URL = 'https://api.lightboxapi.ru/mock/your-workspace';

// Делайте запросы как к обычному API:
const response = await fetch(`${API_URL}/users`);
const users = await response.json();
console.log(users); // [{ id: 1, name: "Иван Петров", ... }, ...]

✅ Преимущества LightBox API:

🖥 Способ 2: Mockoon (локальный, 10 минут)

Mockoon — бесплатное desktop приложение для создания локальных mock серверов. Идеально для индивидуальной разработки и работы офлайн.

Шаг 1: Установите Mockoon

# macOS (Homebrew)
brew install mockoon

# Windows
winget install mockoon.mockoon
# или скачайте с https://mockoon.com/download

# Linux (Snap)
snap install mockoon

# Linux (AppImage)
# Скачайте с https://mockoon.com/download

Шаг 2: Создайте environment

  1. Откройте Mockoon
  2. Нажмите "New environment"
  3. Укажите название и порт (например, 3000)

Шаг 3: Добавьте routes

Нажмите "Add route" и настройте:

[
  {"id": 1, "name": "John Doe", "email": "john@example.com"},
  {"id": 2, "name": "Jane Smith", "email": "jane@example.com"}
]

Шаг 4: Запустите и используйте

Нажмите ▶ Start — сервер запущен:

# Проверьте в терминале:
curl http://localhost:3000/users

# Или в браузере:
# http://localhost:3000/users

✅ Преимущества Mockoon:

⚡ Способ 3: JSON Server (минималистичный, 1 минута)

JSON Server — npm пакет, который создает REST API из JSON файла за секунды. Самый быстрый способ получить работающий mock API.

Шаг 1: Установите JSON Server

# Глобальная установка
npm install -g json-server

# Или в проект
npm install json-server --save-dev

Шаг 2: Создайте db.json

Создайте файл db.json с вашими данными:

{
  "users": [
    {"id": 1, "name": "John Doe", "email": "john@example.com", "role": "admin"},
    {"id": 2, "name": "Jane Smith", "email": "jane@example.com", "role": "user"}
  ],
  "posts": [
    {"id": 1, "title": "Hello World", "body": "First post content", "userId": 1},
    {"id": 2, "title": "Second Post", "body": "More content here", "userId": 2}
  ],
  "comments": [
    {"id": 1, "body": "Great post!", "postId": 1},
    {"id": 2, "body": "Thanks for sharing", "postId": 1}
  ]
}

Шаг 3: Запустите сервер

# Запуск на порту 3001
json-server --watch db.json --port 3001

Шаг 4: Готово! Используйте REST API

# Все ресурсы автоматически получают CRUD endpoints:

# GET (все записи)
curl http://localhost:3001/users

# GET (одна запись)
curl http://localhost:3001/users/1

# POST (создать)
curl -X POST -H "Content-Type: application/json" \
  -d '{"name": "New User", "email": "new@example.com"}' \
  http://localhost:3001/users

# PUT (обновить)
curl -X PUT -H "Content-Type: application/json" \
  -d '{"name": "Updated Name", "email": "updated@example.com"}' \
  http://localhost:3001/users/1

# DELETE (удалить)
curl -X DELETE http://localhost:3001/users/1

# Фильтрация и поиск:
curl "http://localhost:3001/users?role=admin"
curl "http://localhost:3001/users?_sort=name&_order=asc"
curl "http://localhost:3001/posts?userId=1"

✅ Преимущества JSON Server:

💻 Примеры использования в коде

React + TypeScript пример

// types.ts
interface User {
  id: number;
  name: string;
  email: string;
  role: 'admin' | 'user';
}

// config.ts
const API_URL = process.env.NODE_ENV === 'development'
  ? 'https://api.lightboxapi.ru/mock/your-workspace'
  : 'https://api.yourapp.com';

// hooks/useUsers.ts
import { useEffect, useState } from 'react';

export function useUsers() {
  const [users, setUsers] = useState<User[]>([]);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    fetch(`${API_URL}/users`)
      .then(res => {
        if (!res.ok) throw new Error('Failed to fetch users');
        return res.json();
      })
      .then(data => {
        setUsers(data);
        setLoading(false);
      })
      .catch(err => {
        setError(err.message);
        setLoading(false);
      });
  }, []);

  return { users, loading, error };
}

// components/UserList.tsx
function UserList() {
  const { users, loading, error } = useUsers();

  if (loading) return <div className="spinner">Loading...</div>;
  if (error) return <div className="error">Error: {error}</div>;

  return (
    <ul className="user-list">
      {users.map(user => (
        <li key={user.id}>
          <h3>{user.name}</h3>
          <p>{user.email}</p>
          <span className={`badge ${user.role}`}>{user.role}</span>
        </li>
      ))}
    </ul>
  );
}

Node.js + Jest тесты

// __tests__/api.test.js
const axios = require('axios');

const API_URL = 'https://api.lightboxapi.ru/mock/your-workspace';

describe('Users API', () => {
  test('should fetch all users', async () => {
    const response = await axios.get(`${API_URL}/users`);

    expect(response.status).toBe(200);
    expect(Array.isArray(response.data)).toBe(true);
    expect(response.data.length).toBeGreaterThan(0);
  });

  test('should have required fields', async () => {
    const response = await axios.get(`${API_URL}/users`);
    const user = response.data[0];

    expect(user).toHaveProperty('id');
    expect(user).toHaveProperty('name');
    expect(user).toHaveProperty('email');
  });

  test('should fetch single user', async () => {
    const response = await axios.get(`${API_URL}/users/1`);

    expect(response.status).toBe(200);
    expect(response.data.id).toBe(1);
  });
});

Python + requests пример

import requests
from typing import List, TypedDict

class User(TypedDict):
    id: int
    name: str
    email: str
    role: str

API_URL = 'https://api.lightboxapi.ru/mock/your-workspace'

def get_users() -> List[User]:
    """Получить список всех пользователей"""
    response = requests.get(f'{API_URL}/users')
    response.raise_for_status()
    return response.json()

def get_user(user_id: int) -> User:
    """Получить пользователя по ID"""
    response = requests.get(f'{API_URL}/users/{user_id}')
    response.raise_for_status()
    return response.json()

def create_user(name: str, email: str, role: str = 'user') -> User:
    """Создать нового пользователя"""
    response = requests.post(
        f'{API_URL}/users',
        json={'name': name, 'email': email, 'role': role}
    )
    response.raise_for_status()
    return response.json()

# Использование:
if __name__ == '__main__':
    users = get_users()
    print(f"Found {len(users)} users")

    for user in users:
        print(f"- {user['name']} ({user['email']})")

Vue.js + Composition API

// composables/useUsers.js
import { ref, onMounted } from 'vue';

const API_URL = import.meta.env.DEV
  ? 'https://api.lightboxapi.ru/mock/your-workspace'
  : 'https://api.yourapp.com';

export function useUsers() {
  const users = ref([]);
  const loading = ref(true);
  const error = ref(null);

  const fetchUsers = async () => {
    try {
      loading.value = true;
      const response = await fetch(`${API_URL}/users`);
      if (!response.ok) throw new Error('Failed to fetch');
      users.value = await response.json();
    } catch (e) {
      error.value = e.message;
    } finally {
      loading.value = false;
    }
  };

  onMounted(fetchUsers);

  return { users, loading, error, refetch: fetchUsers };
}

// UserList.vue
<template>
  <div v-if="loading">Loading...</div>
  <div v-else-if="error">Error: { error }</div>
  <ul v-else>
    <li v-for="user in users" :key="user.id">
      { user.name } - { user.email }
    </li>
  </ul>
</template>

<script setup>
import { useUsers } from './composables/useUsers';
const { users, loading, error } = useUsers();
</script>

📊 Сравнение методов

Критерий LightBox API Mockoon JSON Server
Время setup 5 минут 10 минут 1 минута
Тип Облачный Desktop app npm пакет
Работа офлайн
Командная работа ⚠️ Export/Import ⚠️ Через Git
CI/CD ✅ CLI
Логирование
GUI ✅ Web ✅ Desktop
CRUD из коробки ⚠️ Ручная настройка ⚠️ Ручная настройка
Импорт OpenAPI
Бесплатный план 1000 req/день Безлимитно Безлимитно
Лучше для Команд, CI/CD Индивидуальной работы Быстрых прототипов

🎯 Best Practices при создании Mock API

1. Используйте реалистичные данные

Не ограничивайтесь {"name": "test"}. Используйте данные, похожие на production:

{
  "id": 42,
  "name": "Александр Иванов",
  "email": "a.ivanov@company.ru",
  "phone": "+7 (999) 123-45-67",
  "created_at": "2025-11-15T10:30:00Z"
}

2. Имитируйте edge cases

Создайте endpoints для тестирования ошибок:

3. Используйте environment переменные

// config.js
const API_URL = {
  development: process.env.MOCK_API_URL || 'http://localhost:3001',
  staging: 'https://api.lightboxapi.ru/mock/staging',
  production: 'https://api.yourapp.com'
}[process.env.NODE_ENV];

4. Документируйте mock endpoints

Создайте README с описанием всех mock endpoints и их ответов. Это поможет команде и будущим разработчикам.

5. Синхронизируйте с реальным API

Mock API должен возвращать данные в том же формате, что и реальный API. При изменении реального API — обновляйте mock.

🔍 FAQ: Часто задаваемые вопросы

❓ Как быстро создать Mock API?
Самые быстрые способы:
  • JSON Server (1 минута): npm install -g json-server && json-server db.json
  • LightBox API (5 минут): Регистрация на сайте и добавление endpoints через UI
JSON Server быстрее для старта, LightBox API лучше для командной работы.
❓ Какой способ создания Mock API лучше для команды?
Для командной работы лучше всего подходит LightBox API:
  • Единый URL для всей команды
  • Изменения видны сразу всем
  • Логирование запросов в реальном времени
  • Не нужно синхронизировать конфиги через Git
❓ Можно ли использовать Mock API в CI/CD?
Да! Все три способа работают в CI/CD:
  • LightBox API: Облачный URL, работает из коробки
  • Mockoon CLI: mockoon-cli start --data env.json
  • JSON Server: json-server --watch db.json & (в фоне)
❓ Чем отличается Mock API от Stub?
Mock API — это полноценный HTTP сервер с endpoints, имитирующий реальный API. Используется для интеграционного тестирования и frontend разработки.

Stub — это простая заглушка в коде, которая возвращает фиксированные значения. Используется в unit-тестах для изоляции компонентов.
❓ Нужно ли создавать Mock API для каждого проекта?
Mock API нужен когда:
  • Backend еще не готов
  • Нужно тестировать независимо от внешних сервисов
  • Хотите имитировать edge cases (ошибки, таймауты)
  • Работаете офлайн
Для простых проектов с готовым и стабильным API — можно обойтись без него.
❓ Как переключаться между Mock и реальным API?
Используйте environment переменные:
// В development используем mock
const API_URL = process.env.NODE_ENV === 'development'
  ? 'https://api.lightboxapi.ru/mock/workspace'
  : 'https://api.production.com';
Или через .env файлы: REACT_APP_API_URL=https://mock-api.com

🎁 Бонус: Начните с LightBox API бесплатно

LightBox API предлагает бесплатный план, которого достаточно для большинства проектов:

Создайте Mock API за 5 минут

LightBox API — простой и мощный инструмент для создания mock API без установки

Начать бесплатно →

📝 Выводы

В этой статье мы рассмотрели 3 способа создать Mock API для тестирования:

  1. LightBox API — облачный сервис, идеален для команд и CI/CD (5 минут)
  2. Mockoon — desktop приложение, отлично для индивидуальной работы офлайн (10 минут)
  3. JSON Server — npm пакет, максимально быстрый старт (1 минута)

🎯 Как выбрать:

Начните с того способа, который подходит вашему проекту, и не тратьте время на ожидание backend!

← Вернуться к статьям