跳转到内容
Tutorial

通过一次 API 调用从任何 JSON 模式生成类型化模拟数据

| 5 min read

将 JSON 架构发送到 Botoi 模拟数据生成器 API,并获取用户个人资料、电子商务订单、博客文章等的真实虚假数据。 在几秒钟内建立种子数据库并测试 UI。

Spreadsheet with user data rows
Photo by Mika Baumeister on Unsplash

每个前端开发人员、QA 工程师和后端构建人员都会遇到同样的问题:您需要真实的数据 测试 UI、播种数据库或验证 API 集成,但手动编写种子脚本非常乏味且 结果看起来很假。 每个表中的硬编码“John Doe”条目。 相同的时间戳。 价格是 总是9.99。

Botoi 模拟数据生成器 API 采用不同的方法。 您定义一个描述形状的 JSON 模式 数据,API 返回与该形状与随机、实际值相匹配的记录数组。 一 HTTP 调用。 无需安装库,无需伪造设置,无需维护种子文件。

它是如何工作的:定义模式,获取数据

端点接受标准 JSON Schema 对象和 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
  }
}

每个订单都有不同的 ID、电子邮件、总计和行项目集。 这 minimummaximum 的限制 quantityprice_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);

generateMockData 函数是可重用的。 使用任何模式和计数调用它,然后插入 结果会变成 Drizzle、Prisma、Knex 或您使用的任何 ORM。

为什么使用 API 而不是库?

  • 没有依赖性。 您不需要安装 faker.js、factory_bot 或任何特定于语言的 图书馆。 单个 HTTP 调用适用于任何语言、shell 脚本或 CI 管道。
  • 模式驱动。 用于验证的相同 JSON 架构可以驱动您的测试数据。 改变 模式和生成的数据随之改变。 没有工厂定义需要保持同步。
  • 格式一致。 每个团队成员都从同一来源获取数据。 没有“在我的机器上运行” 手写夹具之间的差异。
  • 可分享。 将curl 命令复制到Slack 线程、自述文件或CI 配置中。 任何人 无需安装任何东西即可运行它。

实用技巧

  • 将响应保存为固定文件。 运行 API 一次,将 JSON 输出保存到 fixtures/users.json,并在测试中加载该文件。 这使测试保持确定性并且 避免测试运行期间的网络调用。
  • 使用格式提示。 环境 "format": "email" 产生电子邮件形状的字符串。 其他有用的格式包括 "date-time", "uri", 和 "uuid"
  • 复杂数据的嵌套对象。 该模式支持对象内的对象和数组 对象。 通过嵌套来建模您的真实数据库关系 address a 内的对象 customer 目的。
  • 与其他 Botoi 端点结合使用。 生成模拟用户,然后将每封电子邮件传递给 /v1/disposable-email/check 端到端测试您的电子邮件验证流程。

FAQ

我是否需要 API 密钥才能使用模拟数据生成器 API?
不需要。匿名访问的速度为每分钟 5 个请求,并具有基于 IP 的速率限制。 为了获得更高的吞吐量,请在 botoi.com/api 上注册免费的 API 密钥。
端点支持哪些 JSON 模式功能?
该端点支持标准 JSON 模式类型(字符串、整数、数字、布尔值、对象、数组)、格式提示(例如“email”和“uri”)、数字的最小/最大约束以及必需的字段声明。 嵌套对象和对象数组按预期工作。
一次请求可以生成多少条记录?
将请求正文中的“计数”字段设置为您想要的记录数。 终端支持每次通话最多生成 100 条记录。
生成的数据是确定性的吗?
不会。每个请求都会产生不同的随机值。 如果您需要可重现的数据,请将响应保存到固定文件中并将其加载到测试中。
我可以用它来为生产数据库提供种子吗?
端点生成用于开发和测试目的的虚假数据。 姓名、电子邮件和其他值都是虚构的。 请勿将生成的数据用作生产记录。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。