フロントエンド実装、クライアントのデバッグ、新しいHTTPライブラリの検証では、バックエンドを用意せずに「本物っぽいJSON」を返すエンドポイントが必要になることがあります。ダミーAPIは、すぐに呼び出せる無料のパブリックAPIとしてその用途に使えます。この記事では、代表的なダミーAPIの使い分け、実際の呼び出し例、そしてパブリックAPIでは足りなくなったときに独自の偽のREST APIを構築する判断基準を整理します。Fetchの基本を確認したい場合は、Fetch APIの使用に関するMDNガイドもあわせて参照してください。
ダミーAPIとは何か
ダミーAPIは、ユーザー、投稿、製品、カート、TODOなどの一般的なリソースに対して、あらかじめ用意されたJSONを返すホスト型サービスです。多くの場合、サインアップやホスティングは不要で、すぐにHTTPリクエストを送れます。
主な特徴は次のとおりです。
-
GETでサンプルデータを取得できる -
POST、PUT、PATCH、DELETEを受け付けることがある - ただし、書き込み操作は多くの場合「保存されたふり」をするだけ
- 本番データを壊すリスクなく、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
JavaScriptで取得する場合は次のように書けます。
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1');
const post = await res.json();
console.log(post.title);
書き込みリクエストも受け付けますが、保存はされません。
curl -X POST https://jsonplaceholder.typicode.com/posts \
-H "Content-Type: application/json" \
-d '{"title":"hello","body":"world","userId":1}'
POST /posts は通常、疑似的な id: 101 を含むレスポンスを返します。
DummyJSON
DummyJSON は、より実アプリに近いデータを扱いたい場合に便利です。
主なリソースは次のとおりです。
- 製品
- カート
- ユーザー
- 投稿
- コメント
- 引用
- TODO
- レシピ
Eコマース、カートUI、ログイン画面の検証に向いています。
curl https://dummyjson.com/products/1
JavaScriptで製品詳細を取得する例です。
const res = await fetch('https://dummyjson.com/products/1');
const product = await res.json();
console.log(product.title, product.price);
ユーザー追加のような書き込みも試せます。
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);
ただし、このデータも永続化されません。
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"
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);
使い分け早見表
| ダミー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);
新しいユーザーを作成する例です。
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);
このレスポンスはエコーバックされますが、実際には永続化されません。
Python requestsで呼び出す
Pythonでは requests を使うと簡潔です。
import requests
r = requests.get("https://jsonplaceholder.typicode.com/todos/1")
r.raise_for_status()
todo = r.json()
print(todo)
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())
テストコードで使う場合は、返ってくる固定値をアサートできます。ただし、より現実的な名前、メールアドレス、タイムスタンプを使いたい場合は、現実的な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"
}
}
JSONPlaceholderのユーザーデータには、このような subscription_tier や billing はありません。パブリックAPIのスキーマを自分のアプリに合わせて変更することはできません。
2. 状態が必要
実際のカートでは、商品を追加すると合計金額や数量が変わります。
しかし多くのダミーAPIでは、POST に成功しても次の GET でその変更を取得できません。状態を使った検証には向きません。
3. 制御された障害を再現できない
UIでは次のようなケースもテストしたいはずです。
404 Not Found429 Too Many Requests500 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"
}
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);
これにより、バックエンド実装がない状態でも、フロントエンドは合意済みの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)