DEV Community

Cover image for ダミーAPIでのテストとフェイクAPIの作成方法【必要に応じて】
Akira
Akira

Posted on • Originally published at apidog.com

ダミーAPIでのテストとフェイクAPIの作成方法【必要に応じて】

フロントエンド実装、クライアントのデバッグ、新しいHTTPライブラリの検証では、バックエンドを用意せずに「本物っぽいJSON」を返すエンドポイントが必要になることがあります。ダミーAPIは、すぐに呼び出せる無料のパブリックAPIとしてその用途に使えます。この記事では、代表的なダミーAPIの使い分け、実際の呼び出し例、そしてパブリックAPIでは足りなくなったときに独自の偽のREST APIを構築する判断基準を整理します。Fetchの基本を確認したい場合は、Fetch APIの使用に関するMDNガイドもあわせて参照してください。

今すぐApidogを試す

ダミーAPIとは何か

ダミーAPIは、ユーザー、投稿、製品、カート、TODOなどの一般的なリソースに対して、あらかじめ用意されたJSONを返すホスト型サービスです。多くの場合、サインアップやホスティングは不要で、すぐにHTTPリクエストを送れます。

主な特徴は次のとおりです。

  • GET でサンプルデータを取得できる
  • POSTPUTPATCHDELETE を受け付けることがある
  • ただし、書き込み操作は多くの場合「保存されたふり」をするだけ
  • 本番データを壊すリスクなく、UIやHTTPクライアントを検証できる

たとえば POST /posts に送ったデータがID付きで返ってきても、実際には永続化されないケースが一般的です。

そのため、ダミーAPIは次の用途に向いています。

  • フロントエンドの初期プロトタイピング
  • HTTPクライアントの動作確認
  • fetch、Axios、requests などの学習
  • 一覧、詳細、ページネーションUIの仮実装

一方で、独自スキーマ、状態管理、カスタムエラー、遅延レスポンスなどが必要な場合は、パブリックなダミーAPIだけでは不十分です。

テストに使いやすい無料のダミーAPI

バックエンドを用意せずに使える代表的なAPIを3つ紹介します。

JSONPlaceholder

JSONPlaceholder は、最もよく使われるダミーAPIの1つです。

提供される主なリソースは次のとおりです。

  • 投稿: 100件
  • コメント: 500件
  • アルバム: 100件
  • 写真: 5,000件
  • TODO: 200件
  • ユーザー: 10件

投稿とコメント、アルバムと写真のように関連データがあるため、ネストしたデータ取得や詳細画面の検証に使いやすいです。

curl https://jsonplaceholder.typicode.com/posts/1
Enter fullscreen mode Exit fullscreen mode

JavaScriptで取得する場合は次のように書けます。

const res = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const post = await res.json();

console.log(post.title);
Enter fullscreen mode Exit fullscreen mode

書き込みリクエストも受け付けますが、保存はされません。

curl -X POST https://jsonplaceholder.typicode.com/posts \
  -H "Content-Type: application/json" \
  -d '{"title":"hello","body":"world","userId":1}'
Enter fullscreen mode Exit fullscreen mode

POST /posts は通常、疑似的な id: 101 を含むレスポンスを返します。

DummyJSON

DummyJSON は、より実アプリに近いデータを扱いたい場合に便利です。

主なリソースは次のとおりです。

  • 製品
  • カート
  • ユーザー
  • 投稿
  • コメント
  • 引用
  • TODO
  • レシピ

Eコマース、カートUI、ログイン画面の検証に向いています。

curl https://dummyjson.com/products/1
Enter fullscreen mode Exit fullscreen mode

JavaScriptで製品詳細を取得する例です。

const res = await fetch('https://dummyjson.com/products/1');
const product = await res.json();

console.log(product.title, product.price);
Enter fullscreen mode Exit fullscreen mode

ユーザー追加のような書き込みも試せます。

const res = await fetch('https://dummyjson.com/users/add', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    firstName: 'Ada',
    lastName: 'Lovelace',
  }),
});

const createdUser = await res.json();
console.log(createdUser);
Enter fullscreen mode Exit fullscreen mode

ただし、このデータも永続化されません。

DummyJSONには認証フローもあり、ユーザー名とパスワードをPOSTしてトークンを受け取れます。実際のIDプロバイダーを接続する前に、トークン保存や認証済みリクエストの実装を練習できます。

reqres.in

reqres.in は、リクエストとレスポンスのライフサイクルを確認する用途に向いています。

主な用途は次のとおりです。

  • ユーザー一覧
  • 単一ユーザー取得
  • 登録
  • ログイン
  • ページネーション
  • 遅延レスポンス

現在の無料枠ではAPIキーヘッダーが必要です。x-api-key: reqres-free-v1 を付けないと 401 が返ります。

curl https://reqres.in/api/users/2 \
  -H "x-api-key: reqres-free-v1"
Enter fullscreen mode Exit fullscreen mode

JavaScriptでは次のように呼び出せます。

const res = await fetch('https://reqres.in/api/users/2', {
  headers: {
    'x-api-key': 'reqres-free-v1',
  },
});

const data = await res.json();
console.log(data.data.email);
Enter fullscreen mode Exit fullscreen mode

使い分け早見表

ダミーAPI 最適用途 認証フロー 書き込みの永続性
JSONPlaceholder ブログ形式のデータ、ネストした読み込み なし 保存なし
DummyJSON Eコマース、カート、ログイン あり(トークン) 保存なし
reqres.in ページネーション、登録、ログインのデモ APIキーヘッダー 保存なし

さらに幅広い選択肢を探す場合は、テスト用のパブリックAPIのまとめを参照してください。天気、通貨、テーマ別データが必要な場合は、開発者向けの無料パブリックAPIリストも役立ちます。

コードでダミーAPIを呼び出す

ダミーAPIの呼び出しは、通常のHTTP APIと同じです。ここではJavaScriptとPythonの例を示します。

JavaScriptのfetchで呼び出す

ユーザーを取得する例です。

const res = await fetch('https://dummyjson.com/users/1');

if (!res.ok) {
  throw new Error(`HTTP error: ${res.status}`);
}

const user = await res.json();
console.log(user.firstName);
Enter fullscreen mode Exit fullscreen mode

新しいユーザーを作成する例です。

const res = await fetch('https://dummyjson.com/users/add', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    firstName: 'Ada',
    lastName: 'Lovelace',
  }),
});

if (!res.ok) {
  throw new Error(`HTTP error: ${res.status}`);
}

const created = await res.json();
console.log(created);
Enter fullscreen mode Exit fullscreen mode

このレスポンスはエコーバックされますが、実際には永続化されません。

Python requestsで呼び出す

Pythonでは requests を使うと簡潔です。

import requests

r = requests.get("https://jsonplaceholder.typicode.com/todos/1")
r.raise_for_status()

todo = r.json()
print(todo)
Enter fullscreen mode Exit fullscreen mode

POSTの例です。

import requests

payload = {
    "title": "hello",
    "body": "world",
    "userId": 1
}

r = requests.post(
    "https://jsonplaceholder.typicode.com/posts",
    json=payload
)
r.raise_for_status()

print(r.json())
Enter fullscreen mode Exit fullscreen mode

テストコードで使う場合は、返ってくる固定値をアサートできます。ただし、より現実的な名前、メールアドレス、タイムスタンプを使いたい場合は、現実的なAPIテストデータの作成に関するガイドを参照してください。

パブリックダミーAPIでは不十分になるケース

パブリックダミーAPIは便利ですが、アプリの要件が具体化すると限界があります。

1. データの形状が一致しない

たとえばアプリが次のようなユーザーを期待しているとします。

{
  "id": "usr_123",
  "email": "user@example.com",
  "subscription_tier": "pro",
  "billing": {
    "status": "active",
    "next_payment_at": "2026-07-01T00:00:00Z"
  }
}
Enter fullscreen mode Exit fullscreen mode

JSONPlaceholderのユーザーデータには、このような subscription_tierbilling はありません。パブリックAPIのスキーマを自分のアプリに合わせて変更することはできません。

2. 状態が必要

実際のカートでは、商品を追加すると合計金額や数量が変わります。

しかし多くのダミーAPIでは、POST に成功しても次の GET でその変更を取得できません。状態を使った検証には向きません。

3. 制御された障害を再現できない

UIでは次のようなケースもテストしたいはずです。

  • 404 Not Found
  • 429 Too Many Requests
  • 500 Internal Server Error
  • 3秒遅延する 200 OK
  • 不正なJSONレスポンス

パブリックAPIでは、こうしたレスポンスを任意の条件で返す制御が難しいです。

4. バックエンド完成前に契約ベースで開発したい

フロントエンドとバックエンドが並行開発される場合、APIが完成するまで待つと実装が止まります。

この場合は、OpenAPIなどで合意した契約に基づき、先にモックエンドポイントを用意する方が効率的です。

この段階では、借り物のダミーAPIではなく、自分たちのデータ形状とレスポンスを返すテスト用のモックAPIが必要になります。

Apidogで独自の偽APIを構築する

Apidog は、APIの設計、テスト、デバッグ、モックを1つの場所で扱えるAPIプラットフォームです。

モック機能はスキーマ駆動型で、エンドポイントの構造を読み取り、組み込みのFakerルールを使って現実的な偽データを生成できます。

基本的な流れは、ワークフローの簡単な説明にもあるとおりです。

1. エンドポイントを作成またはインポートする

ApidogでAPIを新規作成するか、既存のOpenAPIまたはSwaggerファイルをインポートします。

例として、次のようなレスポンススキーマを定義します。

{
  "id": "string",
  "email": "string",
  "subscription_tier": "string",
  "createdAt": "string"
}
Enter fullscreen mode Exit fullscreen mode

2. スマートモックでデータを生成する

Apidogはフィールド名や型に基づいて、適切な値を生成します。

例:

  • email → メールアドレス
  • createdAt → タイムスタンプ
  • price → 数値
  • country → 国名

必要に応じて、フィールドごとの生成ルールも調整できます。

3. モックURLを呼び出す

Apidogは各エンドポイント用のモックURLを提供します。

フロントエンドやテストコードからは、通常のAPIと同じように呼び出せます。

const res = await fetch('https://your-mock-url.example.com/users/1');
const user = await res.json();

console.log(user.email);
Enter fullscreen mode Exit fullscreen mode

これにより、バックエンド実装がない状態でも、フロントエンドは合意済みのAPI契約に対して開発できます。

4. 条件付きレスポンスやエラーを追加する

必要に応じて、次のようなレスポンスを設定できます。

  • 正常系の 200
  • 存在しないリソースの 404
  • サーバーエラーの 500
  • 遅延レスポンス
  • 条件に応じた異なるレスポンス

これにより、パブリックダミーAPIでは再現しにくい異常系のUIも検証できます。

OpenAPIスキーマからモックデータを生成する考え方を詳しく知りたい場合は、OpenAPIスキーマからモックデータを生成するチュートリアルを参照してください。

パブリックダミーAPIとApidogモックの違い

必要性 パブリックダミーAPI Apidogモック
すぐにJSONを取得したい 向いている 向いている
正確なデータ形状が必要 不向き 向いている
カスタムエラーを返したい 不向き 向いている
遅延レスポンスを制御したい 不向き 向いている
OpenAPI契約に合わせたい 不向き 向いている
セットアップ時間 ほぼゼロ 数分

使い分けの目安はシンプルです。

  • 一時的にJSONが欲しいだけなら、JSONPlaceholderやDummyJSONを使う
  • 実際のAPI契約に合わせたいなら、Apidogなどで自分たちのモックを作る
  • リリース前提のフロントエンド実装では、プロジェクト専用のモックを使う

よくある質問

ダミーAPIはモックAPIと同じですか?

重複しますが、同じ意味ではありません。

ダミーAPIは、JSONPlaceholderのように公開されている共有サービスを指すことが多いです。一方、モックAPIは、自分で定義して制御するAPIです。

つまり、ダミーAPIは「他者がホストしている汎用モックAPI」と考えると理解しやすいです。詳しくは、モックAPIとは何かを参照してください。

無料の偽APIに実データを送っても安全ですか?

いいえ。

パブリックダミーAPIに、実ユーザーの個人情報、秘密情報、トークン、社内データを送信してはいけません。POSTした内容はログに残る可能性があるものとして扱うべきです。

使うのは、使い捨てのテストデータだけにしてください。

ダミーAPIは送信したデータを保存しますか?

多くの場合、保存されません。

JSONPlaceholder、DummyJSON、reqres.in は書き込みリクエストを受け付け、ID付きのレスポンスを返します。しかし、実際には永続化されません。

状態を維持したい場合は、ステートフルなモックAPIまたは実際のバックエンドが必要です。

コードを書かずに偽APIを構築できますか?

はい。

Apidogでは、エンドポイントとレスポンススキーマを定義し、スマートモックでデータを生成できます。サーバーコードを書く必要はありません。OpenAPIファイルをインポートして、数分でモックエンドポイントを用意することもできます。

まとめ

JSONPlaceholder、DummyJSON、reqres.in のようなパブリックダミーAPIは、プロトタイピングや学習で素早くJSONを取得する方法として便利です。セットアップ不要で、すぐにHTTPリクエストを試せます。

ただし、次の要件が出てきたら、独自のモックAPIに切り替えるべきです。

  • アプリ固有のデータ形状が必要
  • 状態を扱いたい
  • エラーや遅延を制御したい
  • OpenAPIなどの契約に合わせたい
  • バックエンド完成前にフロントエンドを進めたい

Apidogを使うと、仕様をインポートし、スキーマ駆動型のモックデータを生成し、バックエンドコードがなくてもAPIエンドポイントを呼び出せます。Apidogをダウンロードして、次のAPI契約を動作するモックとして検証してみてください。

Top comments (0)