Gerar um conjunto de dados JSON fictício

gera N registos JSON correspondentes a um esquema simples, a partir de Faker (locale fr_FR ou en_US)

Para que servem dados fictícios?

A necessidade aparece em todas as etapas do ciclo de desenvolvimento. Para uma demo, precisamos de utilizadores plausíveis, não de Lorem Ipsum truncado. Para testes de integração, queremos um conjunto de dados reproduzível mas variado. Para um ambiente de pré-produção isolado do RGPD, substituem-se os dados reais por equivalentes fictícios. Para uma maqueta UI, é preciso popular tabelas com entradas credíveis. O gerador de dados fictícios cobre estes casos produzindo registos JSON conformes a um esquema simples.

O formato do esquema

O esquema é um objeto JSON em que cada chave é o nome do campo produzido e o valor é um tipo Faker. Por exemplo:

{
  "name": "name",
  "email": "email",
  "age": "number 18-65",
  "active": "boolean",
  "registered_on": "date"
}

A ferramenta gera depois N registos a respeitar este esquema, na locale escolhida (francês ou inglês). O resultado é um array JSON utilizável diretamente como fixture, como corpo de um pedido de API, ou como input de um seeder de base de dados.

Tipos suportados

  • name: nome completo ("Marie Dupont").
  • firstName / lastName: nome próprio e apelido separados.
  • email: endereço de e-mail fictício (utiliza safeEmail do Faker, que produz domínios reservados example.com não contactáveis).
  • phone: número de telefone formatado à locale.
  • address: endereço postal completo.
  • number: inteiro aleatório entre 0 e 1000 por defeito, ou number a-b para um intervalo personalizado.
  • boolean: true ou false aleatório.
  • date: data em formato ISO 8601 (YYYY-MM-DD).
  • uuid: UUID v4.
  • text: parágrafo curto lorem-ipsum-esco (~120 caracteres).
  • string: três palavras aleatórias.
  • url: URL fictício (https://example.org/...).

Qualquer tipo não reconhecido é conservado tal como está no resultado. É uma escolha: se colocar "role": "admin" no esquema, cada registo terá "role": "admin". Permite misturar valores constantes e campos dinâmicos sem mudar de ferramenta.

Escolha da locale

O Faker dispõe de dezenas de locales. A ferramenta expõe as duas mais úteis num contexto francófono:

  • fr_FR: nomes franceses, endereços franceses, números de telefone formato francês, frases lorem-ipsum em francês aproximado.
  • en_US: nomes e endereços americanos, números de telefone formato US.

Para uma coerência de demonstração em francês, escolha fr_FR. Para um teste de internacionalização, misture as duas execuções ou aumente o número de registos para dispor de uma variedade de origens.

Casos de uso

  • Fixtures de testes: gerar 50 utilizadores, colá-los num ficheiro YAML do AliceBundle ou num seeder. Reproduzível quando se fixa um seed Faker, variado caso contrário.
  • Maquetas UI: preencher uma tabela React/Vue com dados plausíveis. Muito mais expressivo do que uma tabela vazia ou foo / bar / baz.
  • Carga de teste: gerar um payload JSON volumoso para um teste de débito (k6, JMeter, Locust).
  • Demos comerciais: popular uma instância de demonstração com entradas que se pareçam com casos reais mas não corram risco de divulgar informação sensível.
  • Anonimização: substituir uma exportação de produção por um equivalente fictício antes de o partilhar com um subcontratado ou de o utilizar em pré-produção.

Limites voluntários

Para se manter simples de utilizar, a ferramenta não suporta esquemas encadeados (um campo que seja ele próprio um objeto ou um array de objetos). Para tais necessidades, é melhor escrever um script Faker dedicado, ou compor várias chamadas sucessivas. O limite voluntário evita também combinações absurdas ("items": "name" com uma cardinalidade aleatória) que tornariam a ferramenta menos previsível.

O número de registos é limitado a 500. Acima, espera-se de um ambiente de teste que gere as suas fixtures via código dedicado (Faker em CLI, Foundry, factory_bot, etc.). A ferramenta web é útil até algumas centenas de registos; acima, a memória e o tempo de resposta limitam a experiência.

Reprodutibilidade e segurança

Os valores são produzidos com um PRNG não determinista: cada execução produz dados diferentes. Para testes que devam ser reproduzíveis (CI), capture a saída uma vez e comprometa-a. Para dados verdadeiramente sensíveis (anonimização de produção), tenha em mente que a geração num servidor público não é o canal certo: prefira um script local que nunca saia do seu posto.

Perguntas frequentes

Os e-mails gerados são válidos?

O formato é válido (RFC 5322), mas o domínio é example.com ou equivalente reservado pela IANA. Nenhum destes e-mails pode receber mensagens; é intencional para evitar spam acidental em endereços verdadeiros.

Posso obter o mesmo conjunto de dados várias vezes?

Não através da interface web: a ferramenta não fixa um seed. Para uma reprodutibilidade estrita, programe a geração em local com Faker e um seed fixo ($faker->seed(1234);).

Como gerar um objeto encadeado?

A ferramenta só suporta um esquema plano. Para encadeamento, pós-processe a saída com um script ou escreva diretamente o código Faker correspondente.

Porque é que os meus números estão todos entre 0 e 1000?

É o intervalo por defeito. Especifique um intervalo: "age": "number 18-65", "price": "number 1-9999", etc.

Que ligações tem com outras ferramentas do site?

Para UUIDs em quantidade, veja o gerador de UUID. Para palavras-passe, o gerador de palavras-passe. Para texto, o gerador de texto. O mock data generator é a ferramenta transversal que combina várias destas gerações.

Exemplo de pedido

curl -X POST https://cdrn.fr/api/v1/tools/mock-data-generator/execute \
  -H "Content-Type: application/json" \
  -d '{"schema":"{\"name\": \"name\", \"email\": \"email\", \"age\": \"number 18-65\"}","count":5,"locale":"fr_FR"}'

Esquema de entrada

Campo Tipo Obrigatório Predefinição
schema text {"name": "name", "email": "email", "age": "number 18-65"}
count integer 5
locale choice (fr_FR, en_US) fr_FR

Pontos de acesso

  • GET https://cdrn.fr/api/v1/tools - lista todas as ferramentas disponíveis
  • GET https://cdrn.fr/api/v1/tools/mock-data-generator - obtém o esquema desta ferramenta
  • POST https://cdrn.fr/api/v1/tools/mock-data-generator/execute - executa esta ferramenta com um payload JSON