ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【Laravel】Http ファサードを使って API を叩く際のエラー判定

Laravel で API を実行するために Http ファサードを使ったのですがエラー判定でちょっと躓いたのでメモです。

レスポンス前後でエラーを出し分ける

レスポンスの成否判定に便利な failed メソッドがあります。
下記に書いてあるとおりステータスコード 400 以上を失敗とみなしてくれます。
細かいエラー内容は置いておいてとりあえず成否を判定したい場合に便利ですね!

readouble.com

ただ、あくまで上記はレスポンスステータスコードを見るだけです。
そのため、ドメイン名が解決できないなどレスポンスが返る以前のエラーは引っかからないんですね。

今回はレスポンスが返ってきた場合は少しでも情報をログに残したかったので以下のようにわけて書きました。

        try {
            $response = Http::post($url, [
                'user_id' => $id,
                'data'      => $data,
            ]);
        } catch (\Exception $e) { // ホスト名が解決できないなどレスポンスが返ってくる以前のエラーに対応
            throw new ApiException();
        }

        // レスポンスが返ってきたがエラー
        if ($response->failed()) {          
            throw new ApiException($response->status());
        }

今回エラー処理をけっこう細かく実装しているんですが難しいですね…!