DEV Community

Cover image for httpbinとは?エンドポイント、使い方、代替サービス
Akira
Akira

Posted on • Originally published at apidog.com

httpbinとは?エンドポイント、使い方、代替サービス

実物のバックエンドを用意せずにHTTPクライアントを検証したい場合、httpbinは最小構成で使える便利なHTTPエコーサービスです。送信したリクエストをJSONで返すため、ヘッダー、クエリ、POSTボディ、認証情報、エラー処理、タイムアウト処理をすぐ確認できます。生のcurlコマンドでも、ApidogのようなAPIクライアントでも利用できます。公開インスタンスはhttpbin.orgで提供されており、プロジェクトはISCライセンスのオープンソースです。

今すぐApidogを試す

httpbinとは?

httpbinは、HTTPリクエストの内容をそのままレスポンスとして返すHTTPリクエスト・レスポンスサービスです。Pythonのrequestsライブラリで知られるKenneth Reitzによって作成され、PythonとFlaskで書かれています。

使い方は単純です。たとえば、HTTPクライアントがUser-Agentヘッダーを正しく送っているか確認したい場合は、次のURLにアクセスします。

curl https://httpbin.org/headers
Enter fullscreen mode Exit fullscreen mode

レスポンスには、サーバーが実際に受け取ったヘッダーがJSONで返ります。データベース、ログイン、テスト用バックエンドの準備は不要です。

公開インスタンスのhttpbin.orgは簡単な確認に便利ですが、無料の共有サービスであるため、遅延や一時的な停止が発生することがあります。現在のコードはpostmanlabs/httpbinのGitHubリポジトリにあり、Kongなどのコミュニティフォークも存在します。CIや定期テストで使う場合は、後述するDockerによるセルフホストを検討してください。

よく使うhttpbinエンドポイント

httpbinには、HTTPクライアントの挙動を検証するためのエンドポイントが用意されています。

エンドポイント 用途
/get GETリクエストのクエリ引数、ヘッダー、発信元IPを返します
/post POSTしたフォームデータ、JSONボディ、ヘッダーを返します
/put, /patch, /delete 各HTTPメソッドのリクエスト内容を返します
/status/{codes} /status/404/status/503のように、指定したステータスコードを返します
/headers サーバーが受け取ったリクエストヘッダーのみを返します
/ip 発信元IPアドレスを返します
/user-agent クライアントが送信したUser-Agentを返します
/delay/{n} タイムアウトテスト用に、応答前にn秒待機します(最大10秒)
/basic-auth/{user}/{passwd} 一致するBasic認証情報を送信した場合のみ200を返します
/bearer Authorizationヘッダー内のBearerトークンを確認します
/redirect/{n} リダイレクト処理の検証用に、n回リダイレクトします
/cookies クライアントが送信したCookieを返します
/uuid ランダムなUUIDを返します
/anything HTTPメソッドに関係なく、リクエスト内容を返します

特に実装時に便利なのは/status/{codes}/delay/{n}です。実APIでは再現しにくい500系エラー、429、タイムアウトなどを意図的に発生させられます。

リクエストのエコーではなく、ユーザー一覧や注文データのような偽レスポンスが必要な場合は、httpbinに加えてテストデータ用の偽APIやモックサーバーを使うとよいです。

curlでhttpbinを試す

1. GETリクエストの内容を確認する

curl "https://httpbin.org/get?tool=apidog&check=headers"
Enter fullscreen mode Exit fullscreen mode

レスポンス例では、次のような情報を確認できます。

  • args: クエリパラメータ
  • headers: サーバーが受け取ったヘッダー
  • origin: 発信元IP
  • url: 実際にアクセスされたURL

HTTPクライアントが意図したパラメータを送信しているか確認するのに使えます。

2. JSONのPOSTボディを確認する

curl -X POST "https://httpbin.org/post" \
  -H "Content-Type: application/json" \
  -d '{"name": "widget", "qty": 3}'
Enter fullscreen mode Exit fullscreen mode

httpbinは、解析済みのjson、生のdata、受信したheadersを返します。これにより、Content-TypeやJSONペイロードが壊れずに送信されているか確認できます。

3. エラーハンドリングを検証する

curl -i "https://httpbin.org/status/503"
Enter fullscreen mode Exit fullscreen mode

実際に503 Service Unavailableが返ります。クライアント側で以下を確認してください。

  • 例外が想定どおり発生するか
  • リトライが動くか
  • 最大リトライ回数で停止するか
  • ユーザー向けエラーに変換できているか

429を検証したい場合は次のようにします。

curl -i "https://httpbin.org/status/429"
Enter fullscreen mode Exit fullscreen mode

4. タイムアウトを検証する

curl -i "https://httpbin.org/delay/5"
Enter fullscreen mode Exit fullscreen mode

5秒待ってからレスポンスが返ります。HTTPクライアントのタイムアウト設定が3秒なら、ここでタイムアウト例外が発生するはずです。

アプリケーションコードからhttpbinを使う

たとえばJavaScriptのfetchで、エラー時の処理を確認できます。

async function requestWithCheck() {
  const res = await fetch("https://httpbin.org/status/503");

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

  return res.json();
}

requestWithCheck().catch((err) => {
  console.error(err.message);
});
Enter fullscreen mode Exit fullscreen mode

タイムアウト処理を検証する場合は、AbortController/delay/{n}を組み合わせます。

const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 3000);

try {
  const res = await fetch("https://httpbin.org/delay/5", {
    signal: controller.signal,
  });

  console.log(await res.json());
} catch (err) {
  console.error("timeout or request failed:", err.name);
} finally {
  clearTimeout(timeout);
}
Enter fullscreen mode Exit fullscreen mode

このように、実APIに影響を与えずにエラー系・遅延系のコードパスを検証できます。

Apidogでhttpbinを検証する

ターミナルではなくGUIで確認したい場合は、同じURLをApidogに貼り付けて送信できます。

実装手順は次のとおりです。

  1. Apidogで新しいリクエストを作成する
  2. URLにhttps://httpbin.org/getを入力する
  3. Query Paramsにtool=apidogなどを追加する
  4. Sendをクリックする
  5. レスポンスのargsheadersを確認する
  6. 必要に応じてリクエストを保存する

保存したリクエストは、チーム内で共有したり、環境変数を使ってURLを切り替えたりできます。ターミナル中心で作業したい場合は、TUI REST APIクライアントも選択肢になります。

Dockerでhttpbinをセルフホストする

公開されているhttpbin.orgは一度きりの確認には便利ですが、CIや社内ネットワークで安定して使うならセルフホストが安全です。Dockerイメージを使えばすぐに起動できます。

docker pull kennethreitz/httpbin
docker run -p 80:80 kennethreitz/httpbin
Enter fullscreen mode Exit fullscreen mode

起動後、次のURLにアクセスします。

curl http://localhost/get
Enter fullscreen mode Exit fullscreen mode

公開サイトと同じようにリクエスト内容が返ります。外部サービスに依存しないため、CIパイプラインでも使いやすくなります。DockerイメージはDocker Hubでkennethreitz/httpbinとして公開されています

ポート80がすでに使われている場合は、ホスト側のポートを変更します。

docker run -p 8080:80 kennethreitz/httpbin
Enter fullscreen mode Exit fullscreen mode

その場合は、次のURLを使います。

curl http://localhost:8080/get
Enter fullscreen mode Exit fullscreen mode

CIでhttpbinを使う例

CI上でHTTPクライアントのエラー処理をテストしたい場合は、テストの前にDockerでhttpbinを起動しておくと安定します。

docker run -d --name httpbin -p 8080:80 kennethreitz/httpbin

curl -i http://localhost:8080/status/503
curl -i http://localhost:8080/delay/2
Enter fullscreen mode Exit fullscreen mode

テストコード側では、ベースURLを環境変数にしておくと、ローカルとCIで切り替えやすくなります。

export HTTPBIN_BASE_URL=http://localhost:8080
Enter fullscreen mode Exit fullscreen mode
const baseUrl = process.env.HTTPBIN_BASE_URL ?? "https://httpbin.org";

const res = await fetch(`${baseUrl}/status/500`);
console.log(res.status);
Enter fullscreen mode Exit fullscreen mode

httpbinの代替

httpbinはHTTPリクエストのエコーに特化したツールです。用途によっては、次の代替も検討できます。

Postman Echo

Postman Echoは、httpbinと同じくHTTPリクエストをエコーするホスト型サービスです。

curl https://postman-echo.com/get
Enter fullscreen mode Exit fullscreen mode

GET、POST、認証、ユーティリティ系エンドポイントを提供しています。詳細はPostman Echoのドキュメントを参照してください。httpbin.orgが不安定な場合の代替になります。

セルフホスト型httpbin

Dockerでhttpbinを起動すれば、同じエンドポイントを自分の環境で使えます。共有サービスのレート制限や停止に影響されないため、CIやプライベートネットワーク内での利用に向いています。

モックサービス

httpbinはリクエストを返すだけで、現実的な業務データを返すわけではありません。ユーザー一覧、注文オブジェクト、ページネーション結果のような構造化レスポンスが必要な場合は、モックサーバーを使う方が適しています。

Apidogには、スキーマからレスポンスを生成するスマートモック機能があります。バックエンドが未実装でも、フロントエンドは定義済みエンドポイントに対して開発を進められます。

クライアントおよびテスト層としてのApidog

httpbinはリクエストを送る先です。一方、Apidogはリクエストを作成・送信・保存・検証するためのAPIクライアント兼テストプラットフォームです。

Apidogでは次の作業ができます。

  • APIエンドポイントの設計
  • リクエスト送信
  • レスポンス確認
  • アサーション作成
  • 複数リクエストのシナリオ化
  • CIでの実行
  • モックレスポンスの利用

httpbinをApidogから呼び出すことも、httpbinだけでは足りない場面でApidogのモックや自動テストに移行することもできます。インストール不要の選択肢を比較したい場合は、無料オンラインAPIテストツールも参考になります。

よくある質問

httpbinは無料で使えますか?

はい。公開されているhttpbin.orgは無料で使え、アカウントも不要です。ソースコードはISCライセンスのオープンソースなので、自分でホストすることもできます。

httpbinはまだメンテナンスされていますか?

コードベースはpostmanlabs/httpbin GitHubリポジトリにあり、継続的な関心はあります。ただし、httpbin.orgは不安定になることがあるため、重要な用途ではDockerでセルフホストする構成がよく使われます。

httpbinでWebhookをテストできますか?

限定的です。httpbinは「自分が送ったリクエスト」をエコーしますが、サードパーティからのイベントを受け取り、ローカル環境へ転送する用途には向いていません。

Webhookの検証には、トンネリングサービスや専用の検査サービスを使ってください。詳しくは、ローカルホストAPIとWebhookのテストに関するガイドと、Webhookの仕組みの解説を参照してください。

httpbinとPostman Echoの違いは何ですか?

どちらもHTTPリクエストをJSONとしてエコーします。httpbinはオープンソースのPython/Flaskサービスで、Postman EchoはPostmanが提供するホスト型サービスです。利用できる方、安定している方を選べば問題ありません。

httpbinでエラー処理をテストできますか?

はい。/status/{code}で任意のステータスコードを返せます。

curl -i https://httpbin.org/status/500
curl -i https://httpbin.org/status/429
Enter fullscreen mode Exit fullscreen mode

また、/delay/{n}で遅延レスポンスを作れます。

curl -i https://httpbin.org/delay/5
Enter fullscreen mode Exit fullscreen mode

リトライ、タイムアウト、エラーメッセージ変換などのクライアント実装を検証するのに適しています。

まとめ

httpbinは、HTTPクライアントの送信内容を確認するための小さく実用的なツールです。/get/postでリクエスト内容を確認し、/statusでエラー処理を検証し、/delayでタイムアウトを再現できます。CIや重要なテストでは、Dockerでセルフホストすると安定します。

エコーだけでなく、保存可能なリクエスト、モック、アサーション、自動テストまで必要になったら、Apidogを組み合わせるとよいです。Apidogをダウンロードして、httpbinでの一時的な確認を、繰り返し実行できるAPIテストに変換できます。

Top comments (0)