コンテンツへスキップ
Tutorial

1 回の 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 はランダム化された現実的な値を使用してその形状に一致するレコードの配列を返します。 1 つ 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 配列 どのフィールドがすべてのレコードに出現する必要があるかをジェネレーターに指示します。

例: eコマース注文

注文管理ダッシュボードをテストしますか? 品目、セント単位の価格、およびステータス値を含む注文が必要です。 これがそのスキーマです。

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、電子メール、合計、および品目のセットが与えられます。 の 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
  }'

著者、タイトル、タグ配列、発行日が異なる 10 個のブログ投稿。 ページネーションをテストするには十分です。 フィクスチャを 1 つも手で書かずに、ロジックのフィルタリングと並べ替えを行うことができます。

1 つのスクリプトでデータベースをシードする

モック データ ジェネレーターとデータベース クライアントを組み合わせると、完全なシード スクリプトが完成します。 以下は、PostgreSQL データベースに 50 人のユーザーを挿入する bash バージョンです。

#!/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、一度に 1 つずつ挿入します。 より大きなデータセットの場合は、出力をバルクにパイプします。 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 呼び出しは、任意の言語、シェル スクリプト、または CI パイプラインから機能します。
  • スキーマ駆動型。 検証に使用するのと同じ JSON スキーマでテスト データを駆動できます。 変更 スキーマと、生成されたデータはそれに応じて変更されます。 同期を保つためのファクトリー定義はありません。
  • 一貫したフォーマット。 すべてのチームメンバーは同じソースからデータを取得します。 「私のマシンでは動作します」はありません 手書きの備品の違い。
  • 共有可能。 curl コマンドを Slack スレッド、README、または CI 構成にコピーします。 誰でも 何もインストールせずに実行できます。

実践的なヒント

  • 応答をフィクスチャ ファイルとして保存します。 API を 1 回実行し、JSON 出力を次の場所に保存します。 fixtures/users.json、そのファイルをテストにロードします。 これにより、テストの決定性が維持され、 テスト実行中のネットワーク呼び出しを回避します。
  • 形式のヒントを使用します。 設定 "format": "email" 電子メール形式の文字列を生成します。 その他の便利な形式には次のものがあります。 "date-time""uri"、 そして "uuid"
  • 複雑なデータのオブジェクトをネストします。 スキーマは、オブジェクト内のオブジェクトと配列をサポートします。 オブジェクト。 実際のデータベース関係をネストしてモデル化します。 address 内部のオブジェクト customer 物体。
  • 他の Botoi エンドポイントと組み合わせます。 模擬ユーザーを生成し、各電子メールを次の宛先に渡します。 /v1/disposable-email/check 電子メール検証フローをエンドツーエンドでテストします。

FAQ

モック データ ジェネレーター API を使用するには API キーが必要ですか?
いいえ。匿名アクセスは、IP ベースのレート制限により、1 分あたり 5 リクエストで利用できます。 スループットを高めるには、botoi.com/api で無料の API キーにサインアップしてください。
エンドポイントはどのような JSON スキーマ機能をサポートしていますか?
このエンドポイントは、標準の JSON スキーマ タイプ (文字列、整数、数値、ブール値、オブジェクト、配列)、「電子メール」や「ウリ」などの形式ヒント、数値の最小/最大制約、および必須のフィールド宣言をサポートしています。 ネストされたオブジェクトとオブジェクトの配列は期待どおりに機能します。
1 回のリクエストでいくつのレコードを生成できますか?
リクエスト本文の「count」フィールドを必要なレコード数に設定します。 エンドポイントは、呼び出しごとに最大 100 件のレコードの生成をサポートします。
生成されたデータは決定的ですか?
いいえ。各リクエストは異なるランダム値を生成します。 再現可能なデータが必要な場合は、応答をフィクスチャ ファイルに保存し、テストにロードします。
これを実稼働データベースのシードに使用できますか?
エンドポイントは、開発およびテストの目的で偽のデータを生成します。 名前、電子メール、その他の値は架空のものです。 生成されたデータを生産記録として使用しないでください。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。