Перейти к содержимому
Tutorial

Генерируйте типизированные макетные данные из любой схемы JSON с помощью одного вызова API.

| 5 min read

Отправьте схему JSON в API генератора макетных данных Botoi и получите реалистичные поддельные данные для профилей пользователей, заказов электронной коммерции, сообщений в блогах и многого другого. Заполните базы данных и протестируйте пользовательские интерфейсы за считанные секунды.

Spreadsheet with user data rows
Photo by Mika Baumeister on Unsplash

Каждый фронтенд-разработчик, инженер по обеспечению качества и разработчик серверной части сталкивается с одним и тем же препятствием: вам нужны реалистичные данные. для тестирования пользовательского интерфейса, заполнения базы данных или проверки интеграции API, но написание исходных сценариев вручную утомительно и результаты выглядят фальшивыми. Жестко закодированные записи «Джон Доу» в каждой таблице. Идентичные временные метки. Цены, которые всегда 9,99.

API генератора макетных данных Botoi использует другой подход. Вы определяете схему JSON, описывающую форму нужные вам данные, а API возвращает массив записей, соответствующих этой форме, со случайными реалистичными значениями. Один HTTP-вызов. Никаких библиотек для установки, никаких настроек мошенников, никаких исходных файлов, которые нужно поддерживать.

Как это работает: определить схему, получить данные обратно

Конечная точка принимает стандартный объект схемы JSON и count параметр. Он возвращает массив созданные записи, соответствующие вашей схеме, с соблюдением типов, форматов и ограничений.

Запрос

curl -X POST https://api.botoi.com/v1/mock/generate \\
  -H "Content-Type: application/json" \\
  -d '{
    "schema": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "name": { "type": "string" },
        "email": { "type": "string", "format": "email" },
        "age": { "type": "integer", "minimum": 18, "maximum": 80 }
      },
      "required": ["id", "name", "email"]
    },
    "count": 5
  }'

Ответ

{
  "success": true,
  "data": {
    "data": [
      { "id": 42, "name": "Sarah Chen", "email": "sarah@example.com", "age": 34 },
      { "id": 87, "name": "Marcus Johnson", "email": "marcus.j@example.com", "age": 28 },
      { "id": 15, "name": "Priya Patel", "email": "priya.patel@example.com", "age": 51 },
      { "id": 63, "name": "David Kim", "email": "dkim@example.com", "age": 45 },
      { "id": 91, "name": "Elena Rodriguez", "email": "elena.r@example.com", "age": 22 }
    ],
    "count": 5
  }
}

Схема соответствует соглашениям схемы JSON. Набор type для управления типом данных, format для подсказок типа "email" или "date-time", и minimum/maximum для числовых диапазонов. required массив сообщает генератору, какие поля должны присутствовать в каждой записи.

Пример: заказы электронной коммерции

Тестируете панель управления заказами? Вам нужны заказы с позициями, ценами в центах и ​​значениями статуса. Вот схема для этого.

curl -X POST https://api.botoi.com/v1/mock/generate \\
  -H "Content-Type: application/json" \\
  -d '{
    "schema": {
      "type": "object",
      "properties": {
        "order_id": { "type": "string" },
        "customer_email": { "type": "string", "format": "email" },
        "total_cents": { "type": "integer", "minimum": 500, "maximum": 50000 },
        "currency": { "type": "string" },
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "sku": { "type": "string" },
              "quantity": { "type": "integer", "minimum": 1, "maximum": 10 },
              "price_cents": { "type": "integer", "minimum": 100, "maximum": 9999 }
            }
          }
        },
        "status": { "type": "string" }
      },
      "required": ["order_id", "customer_email", "total_cents", "currency"]
    },
    "count": 3
  }'

Ответ (показана первая запись):

{
  "success": true,
  "data": {
    "data": [
      {
        "order_id": "ord_7f3a2b",
        "customer_email": "lena.watts@example.com",
        "total_cents": 12450,
        "currency": "usd",
        "items": [
          { "sku": "TSHIRT-BLK-M", "quantity": 2, "price_cents": 2999 },
          { "sku": "HOODIE-GRY-L", "quantity": 1, "price_cents": 6452 }
        ],
        "status": "fulfilled"
      }
    ],
    "count": 3
  }
}

Каждый заказ получает свой идентификатор, адрес электронной почты, общую сумму и набор позиций. minimum и maximum ограничения на quantity и price_cents сохранять ценности в реалистичных пределах.

Пример: сообщения в блоге

Создаете CMS или страницу со списком блогов? Создавайте сообщения с заголовками, фрагментами, авторами, временными метками и тегами.

curl -X POST https://api.botoi.com/v1/mock/generate \\
  -H "Content-Type: application/json" \\
  -d '{
    "schema": {
      "type": "object",
      "properties": {
        "id": { "type": "integer" },
        "title": { "type": "string" },
        "slug": { "type": "string" },
        "author": { "type": "string" },
        "published_at": { "type": "string", "format": "date-time" },
        "tags": {
          "type": "array",
          "items": { "type": "string" }
        },
        "excerpt": { "type": "string" }
      },
      "required": ["id", "title", "slug", "author"]
    },
    "count": 10
  }'

Десять постов в блоге с разными авторами, названиями, массивами тегов и датами публикации. Достаточно проверить пагинацию, логика фильтрации и сортировки без написания ни одного прибора вручную.

Заполнение базы данных одним скриптом

Объедините генератор макетных данных с клиентом базы данных, и вы получите полный исходный сценарий. Вот версия bash, которая вставляет 50 пользователей в базу данных PostgreSQL:

#!/bin/bash
set -euo pipefail

API="https://api.botoi.com/v1/mock/generate"
DB_URL="postgresql://localhost:5432/myapp_dev"

echo "Generating 50 user records..."
USERS=\$(curl -s -X POST "\$API" \\
  -H "Content-Type: application/json" \\
  -d '{
    "schema": {
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "email": { "type": "string", "format": "email" },
        "age": { "type": "integer", "minimum": 18, "maximum": 80 },
        "signup_date": { "type": "string", "format": "date-time" }
      },
      "required": ["name", "email"]
    },
    "count": 50
  }')

echo "\$USERS" | jq -c '.data.data[]' | while read -r row; do
  NAME=\$(echo "\$row" | jq -r '.name')
  EMAIL=\$(echo "\$row" | jq -r '.email')
  AGE=\$(echo "\$row" | jq -r '.age')
  SIGNUP=\$(echo "\$row" | jq -r '.signup_date')

  psql "\$DB_URL" -c "INSERT INTO users (name, email, age, signup_date) VALUES ('\$NAME', '\$EMAIL', \$AGE, '\$SIGNUP');"
done

echo "Seeded 50 users into \$DB_URL"

Скрипт генерирует 50 уникальных записей пользователей, анализирует каждую с помощью jqи вставляет их по одному. Для больших наборов данных перенаправьте выходные данные в общий объем. COPY команда или пакетная вставка.

Версия Node.js

Если ваш стек — JavaScript или TypeScript, вызовите API с помощью fetch и передать результаты в ваш ORM:

const API = "https://api.botoi.com/v1/mock/generate";

async function generateMockData(schema, count) {
  const response = await fetch(API, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ schema, count }),
  });
  const result = await response.json();
  return result.data.data;
}

const userSchema = {
  type: "object",
  properties: {
    name: { type: "string" },
    email: { type: "string", format: "email" },
    role: { type: "string" },
    created_at: { type: "string", format: "date-time" },
  },
  required: ["name", "email", "role"],
};

const users = await generateMockData(userSchema, 25);
console.log(users);

// Pass directly to your ORM
// await db.insert(usersTable).values(users);

The generateMockData функция является многоразовой. Вызовите его с любой схемой и счетчиком, затем вставьте результаты в Drizzle, Prisma, Knex или любой другой ORM, который вы используете.

Зачем использовать API вместо библиотеки?

  • Никаких зависимостей. Вам не нужно устанавливать faker.js, Factory_bot или какой-либо другой язык, специфичный для этого языка. библиотека. Один HTTP-вызов работает с любого языка, сценария оболочки или конвейера CI.
  • Управляемый схемой. Та же схема JSON, которую вы используете для проверки, может управлять вашими тестовыми данными. Изменить схема, и сгенерированные данные изменяются вместе с ней. Никаких заводских определений для синхронизации.
  • Последовательный формат. Каждый член команды получает данные из одного и того же источника. Никаких «работает на моей машине» различия между рукописными светильниками.
  • Поделиться. Скопируйте команду curl в поток Slack, README или конфигурацию CI. Любой можно запустить, ничего не устанавливая.

Практические советы

  • Сохраняйте ответы в виде файлов фиксации. Запустите API один раз, сохраните вывод JSON в fixtures/users.jsonи загрузите этот файл в свои тесты. Это сохраняет тесты детерминированными и позволяет избежать сетевых вызовов во время тестовых запусков.
  • Используйте подсказки по формату. Параметр "format": "email" создает строки в форме электронного письма. Другие полезные форматы включают в себя "date-time", "uri", и "uuid".
  • Встраивайте объекты для сложных данных. Схема поддерживает объекты внутри объектов и массивов объекты. Смоделируйте свои реальные отношения с базой данных, вложив address объект внутри customer объект.
  • Объединитесь с другими конечными точками Ботоя. Создайте фиктивных пользователей, а затем передайте каждое электронное письмо /v1/disposable-email/check чтобы протестировать весь поток проверки электронной почты.

FAQ

Нужен ли мне ключ API для использования API генератора фиктивных данных?
Нет. Анонимный доступ возможен со скоростью 5 запросов в минуту с ограничением скорости по IP. Для повышения производительности зарегистрируйтесь и получите бесплатный ключ API на сайте botoi.com/api.
Какие функции схемы JSON поддерживает конечная точка?
Конечная точка поддерживает стандартные типы схемы JSON (строка, целое число, число, логическое значение, объект, массив), подсказки по формату, такие как «email» и «uri», ограничения минимального и максимального числа для чисел и объявления обязательных полей. Вложенные объекты и массивы объектов работают должным образом.
Сколько записей я могу создать за один запрос?
Установите в поле «count» в теле запроса необходимое количество записей. Конечная точка поддерживает создание до 100 записей за один вызов.
Являются ли сгенерированные данные детерминированными?
Нет. Каждый запрос выдает разные случайные значения. Если вам нужны воспроизводимые данные, сохраните ответ в файле фикстур и загрузите его в свои тесты.
Могу ли я использовать это для заполнения рабочей базы данных?
Конечная точка генерирует поддельные данные для целей разработки и тестирования. Имена, адреса электронной почты и другие значения являются вымышленными. Не используйте сгенерированные данные в качестве производственных записей.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.