Pular para o conteúdo
Tutorial

Gere dados simulados digitados a partir de qualquer esquema JSON com uma chamada de API

| 5 min read

Envie um esquema JSON para a API do gerador de dados simulados do Botoi e receba dados falsos realistas para perfis de usuário, pedidos de comércio eletrônico, postagens de blog e muito mais. Semeie bancos de dados e teste UIs em segundos.

Spreadsheet with user data rows
Photo by Mika Baumeister on Unsplash

Todo desenvolvedor front-end, engenheiro de controle de qualidade e construtor back-end enfrenta o mesmo atrito: você precisa de dados realistas testar uma UI, propagar um banco de dados ou verificar uma integração de API, mas escrever scripts iniciais manualmente é tedioso e os resultados parecem falsos. Entradas "John Doe" codificadas em todas as tabelas. Carimbos de data e hora idênticos. Preços que são sempre 9,99.

A API do gerador de dados simulados do Botoi adota uma abordagem diferente. Você define um esquema JSON que descreve a forma do dados que você deseja, e a API retorna uma matriz de registros que correspondem a essa forma com valores aleatórios e realistas. Um Chamada HTTP. Nenhuma biblioteca para instalar, nenhuma configuração falsa, nenhum arquivo inicial para manter.

Como funciona: defina um esquema, recupere os dados

O endpoint aceita um objeto JSON Schema padrão e um count parâmetro. Ele retorna uma matriz de registros gerados correspondentes ao seu esquema, com tipos, formatos e restrições respeitados.

Solicitar

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
  }'

Resposta

{
  "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
  }
}

O esquema segue as convenções do esquema JSON. Definir type para controlar o tipo de dados, format para dicas como "email" ou "date-time", e minimum/maximum para intervalos numéricos. O required matriz informa ao gerador quais campos devem aparecer em cada registro.

Exemplo: pedidos de comércio eletrônico

Testando um painel de gerenciamento de pedidos? Você precisa de pedidos com itens de linha, preços em centavos e valores de status. Aqui está um esquema para isso.

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
  }'

Resposta (primeiro registro mostrado):

{
  "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
  }
}

Cada pedido recebe um ID, e-mail, total e conjunto de itens de linha diferentes. O minimum e maximum restrições sobre quantity e price_cents manter valores dentro de limites realistas.

Exemplo: postagens de blog

Construindo um CMS ou uma página de listagem de blog? Gere postagens com títulos, slugs, autores, carimbos de data/hora e tags.

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
  }'

Dez postagens de blog com diferentes autores, títulos, matrizes de tags e datas de publicação. O suficiente para testar a paginação, filtragem e classificação lógica sem escrever um único fixture manualmente.

Propagar um banco de dados em um script

Combine o gerador de dados simulados com um cliente de banco de dados e você terá um script inicial completo. Aqui está uma versão bash que insere 50 usuários em um banco de dados 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"

O script gera 50 registros de usuário exclusivos, analisa cada um com jqe os insere um de cada vez. Para conjuntos de dados maiores, canalize a saída em um volume COPY comando ou uma inserção em lote.

Versão Node.js.

Se sua pilha for JavaScript ou TypeScript, chame a API com fetch e passar os resultados para o seu 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);

O generateMockData função é reutilizável. Chame-o com qualquer esquema e conte, depois insira o resulta em Drizzle, Prisma, Knex ou qualquer ORM que você usar.

Por que usar uma API em vez de uma biblioteca?

  • Sem dependências. Você não precisa instalar faker.js, factory_bot ou qualquer idioma específico biblioteca. Uma única chamada HTTP funciona em qualquer linguagem, script de shell ou pipeline de CI.
  • Orientado por esquema. O mesmo esquema JSON que você usa para validação pode orientar seus dados de teste. Mudança o esquema e os dados gerados mudam com ele. Não há definições de fábrica para manter sincronizadas.
  • Formato consistente. Cada membro da equipe obtém dados da mesma fonte. Não "funciona na minha máquina" diferenças entre luminárias escritas à mão.
  • Compartilhável. Copie o comando curl em um thread do Slack, um README ou uma configuração de CI. Qualquer um pode executá-lo sem instalar nada.

Dicas práticas

  • Salve as respostas como arquivos de fixação. Execute a API uma vez, salve a saída JSON em fixtures/users.jsone carregue esse arquivo em seus testes. Isso mantém os testes determinísticos e evita chamadas de rede durante execuções de teste.
  • Use dicas de formato. Contexto "format": "email" produz strings em formato de e-mail. Outros formatos úteis incluem "date-time", "uri", e "uuid".
  • Aninhe objetos para dados complexos. O esquema suporta objetos dentro de objetos e matrizes de objetos. Modele suas relações reais com o banco de dados aninhando um address objeto dentro de um customer objeto.
  • Combine com outros endpoints do Botoi. Gere usuários simulados e passe cada e-mail para /v1/disposable-email/check para testar seu fluxo de validação de e-mail de ponta a ponta.

FAQ

Preciso de uma chave de API para usar a API do gerador de dados simulados?
Não. O acesso anônimo está disponível a 5 solicitações por minuto com limitação de taxa baseada em IP. Para maior rendimento, inscreva-se para obter uma chave de API gratuita em botoi.com/api.
Quais recursos do esquema JSON o endpoint suporta?
O endpoint suporta tipos de esquema JSON padrão (string, inteiro, número, booleano, objeto, array), dicas de formato como "email" e "uri", restrições mínimas/máx para números e declarações de campos obrigatórios. Objetos aninhados e matrizes de objetos funcionam conforme o esperado.
Quantos registros posso gerar em uma única solicitação?
Defina o campo "count" no corpo da solicitação com o número de registros desejado. O endpoint suporta a geração de até 100 registros por chamada.
Os dados gerados são determinísticos?
Não. Cada solicitação produz valores aleatórios diferentes. Se você precisar de dados reproduzíveis, salve a resposta em um arquivo de fixture e carregue-o em seus testes.
Posso usar isso para propagar um banco de dados de produção?
O endpoint gera dados falsos para fins de desenvolvimento e teste. Os nomes, e-mails e outros valores são fictícios. Não utilize dados gerados como registros de produção.

Comece a construir com botoi

150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.