Skip to main content

HTTPクライアントとは

LaravelのHTTPクライアントは、Guzzle をラップした使いやすいAPIです。 Http ファサードを通じて、外部のWebサービスやAPIへのHTTPリクエストを簡潔に記述できます。
Guzzleは事前にインストールされているため、追加の設定なしにすぐ使い始められます。

基本的なリクエスト

GETリクエスト

クエリパラメータは配列で渡せます。

POSTリクエスト

データはデフォルトで application/json として送信されます。

PUT / PATCH / DELETE

レスポンスの処理

Http::get() などのメソッドは Illuminate\Http\Client\Response インスタンスを返します。 このオブジェクトにはレスポンスを検査するための多数のメソッドが用意されています。
JSONレスポンスは配列アクセスでも取得できます。

リクエストオプション

ヘッダーの設定

application/json を受け入れることを示す場合は acceptJson() が便利です。
ブラウザーからLaravelへ送るAJAXリクエストのCSRFヘッダー(X-CSRF-TOKEN / X-XSRF-TOKEN)については CSRFプロテクション を参照してください。

認証

Bearer トークン認証(最も一般的):
Basic認証:

ベースURLの設定

同じホストへのリクエストが多い場合、baseUrl() でまとめられます。

フォームデータの送信

application/x-www-form-urlencoded で送信したい場合は asForm() を使います。

タイムアウト

タイムアウトを超えた場合、Illuminate\Http\Client\ConnectionException がスローされます。 外部APIの呼び出しには必ずタイムアウトを設定することを推奨します。

リトライ

一時的なネットワーク障害やサーバーエラーに対して、自動リトライを設定できます。
条件付きリトライ(接続エラーのときだけリトライするなど):

エラーハンドリング

手動でエラーを確認する

LaravelのHTTPクライアントは、デフォルトでは400・500番台のレスポンスに対して例外をスローしません。 failed()clientError() などで明示的に確認します。

例外をスローする

throw() を使うと、エラー時に Illuminate\Http\Client\RequestException をスローします。
throw() はレスポンスインスタンスを返すため、メソッドチェーンで書けます。
例外をキャッチして処理する場合:

並行リクエスト

複数のAPIを同時に呼び出したい場合、pool() で並行実行できます。
順番に実行するより大幅に高速化できます。外部APIを複数呼び出すダッシュボードなどに有効です。

テスト

Http::fake() によるモック

テストでは Http::fake() を使って実際のHTTPリクエストを送らずにレスポンスをシミュレートします。
特定のURLに対してレスポンスを設定する場合:
レスポンスのシーケンス(複数回呼ばれたときに順番にレスポンスを返す):

リクエストの検証

Http::assertSent() でリクエストの内容を検証できます。
テストでは必ず Http::fake() を先頭で呼び出しましょう。 呼び出し忘れると実際の外部APIにリクエストが飛んでしまいます。 Http::preventStrayRequests() を使うと、フェイクしていないURLへのリクエストで例外をスローさせることができます。

Strayリクエストの防止

実践例: 外部APIを呼び出すサービスクラス

実際のプロジェクトでは、HTTPクライアントのロジックをサービスクラスにまとめるのがベストプラクティスです。
1

サービスクラスを作成する

2

サービスプロバイダーで登録する

3

コントローラーから利用する

4

テストを書く

まとめ

  • HTTPクライアントのロジックはサービスクラスにまとめる
  • 必ずタイムアウトを設定する(timeout()connectTimeout()
  • 一時的な障害に対してリトライを設定する(retry()
  • テストでは Http::fake() を必ず使用し、外部APIを実際に叩かない
  • Http::preventStrayRequests() をテストのセットアップに加えると安心
  • APIのトークンや認証情報は環境変数と config/services.php で管理する
最終更新日 2026年5月26日