
外部API連携の不具合|相手側か自分側かを切り分ける順番
「決済が通らないと連絡が来て確認したら、こちらのコードは何も変えていない」——。 外部サービスとの連携(決済、配送、地図、SMS、認証など、社外のAPIとやり取りする仕組み)を保守していると、この「自分は触っていないのに急に動かない」に何度もぶつかりますよね。相手先のAPIは自分では中を見られません。だから「うちのバグなのか、相手側の障害なのか」が分からないまま、ログとにらめっこする時間が生まれます。あの、原因が自分の管理下にあるかも分からない宙ぶらりん、地味に消耗します。
でも、外部API連携のトラブルは、いきなり全部を疑わなくて大丈夫です。最初にやることはただ一つ、「失敗しているのは自分側か、相手側か」を分けること。ここさえ分ければ、次に動くべき相手(自分のコードか、相手先のサポートか)が決まり、無駄な犯人捜しがぐっと減ります。
この記事では、外部APIとの連携が急に動かなくなったとき、やみくもにコードやネットワークを触る前に、どこを見て「どっち側の問題か」を切り分けるかの順番を一緒に整理します。全部を一度に調べるのではなく、判断に効く手がかりから順に見ていく話です。
結論:まず「相手からの返事(レスポンス)を実際に見る」ことから始めます(推測で切り分けない)。そのうえで、①つながっているか(そもそも相手に届いているか)→②ステータスコードとエラー本文(4xxなら自分側・5xxなら相手側が疑わしい)→③認証・期限(トークン切れ・鍵・IP制限)→④相手の障害情報(ステータスページ・仕様変更の告知)の順に見ていきます。「返事の中身」を1回つかまえた時点で、どちら側を追うべきかはほぼ決まります。焦って自分のコードを書き換える前に、「まず相手の返事を1回記録する」ことをゴールにします。
連携の作りは現場ごとに違います(同期で待つのか、キューで非同期に投げるのか、リトライがあるのか)。順番と考え方を出発点に、自分の現場の仕組みに置き換えて使ってください。
何が起きているか:見えないのは「相手が自分の管理下にない」から
外部API連携がやっかいなのは、症状が複雑だからではなく、トラブルの半分が自分の見えないところ(相手側)で起きているからです。自分のサーバーやログは見られても、相手のサーバーの中は見られません。だから「動かない」の原因が、次のどこにあるのかが最初は分かりません。
- 相手側の一時的な障害:相手のサービスが落ちている・重い。こちらは正しくても、返事が返ってこない、または5xxが返る。
- 相手側の仕様変更:エンドポイントの変更、必須項目の追加、返す形式の変更。告知を見落としていると「昨日まで動いていたのに」になります。
- 認証・期限の失効:トークンの期限切れ、APIキーの無効化、証明書の更新漏れ、IP制限。これは自分側で気づける類のものです。
- 自分側の送り方の問題:パラメータの不足・型違い、文字コード、タイムアウトが短すぎる、リトライで二重送信。
- あいだのネットワーク:DNS、ファイアウォール、プロキシ、相手のIP変更など、「途中」で止まっているパターン。
つまり必要なのは「気合いでコードを読み返す」ことではなく、相手の返事を証拠として押さえ、自分側・相手側・あいだのどこで止まっているかを分ける目です。次から、その順番を見ていきます。
「どっち側か」を分ける4つのステップ

大事なのは、判断に効く手がかりから先に見ることです。多くの「連携が動かない」は、①疎通か②相手の返事の中身で、どっち側かがはっきりします。いきなりコードの中身を読み込むと、そもそも相手に届いていないだけ、という時間の無駄が起きます。
① まず「つながっているか」を確かめる(そもそも届いているか)
最初にやるのは、コードを疑うことではなく、リクエストが相手に届いているかを確かめることです。ここで「届いてすらいない」と分かれば、コードより先に経路(ネットワーク)を見ることになります。
- 名前解決・到達を確認する:相手のドメインが引けるか、そのポートに到達できるか。DNSの変更や、相手のIP変更、こちら側のファイアウォール・プロキシで止まっていることがあります。
- タイムアウトなのか、拒否なのかを見る:「つながらない(接続拒否・到達不可)」のか、「つながるが返事が遅い(タイムアウト)」のかで、疑う場所が変わります。前者は経路、後者は相手の負荷やこちらの待ち時間設定を疑います。
- 手元から直接叩いてみる:アプリを介さず、サーバーから相手のエンドポイントへ最小のリクエストを1回投げてみます。アプリでは失敗するのに手動なら通るなら、原因は自分側の送り方にあります。
ここで届いていない・拒否されるなら、犯人はあいだの経路か相手のダウンです。コードは触らず経路と相手の状況へ。届いていて返事が返るなら、次の②でその返事の中身を読みます。
ここで一呼吸。「自分のせいか分からない」時間は、腕を疑う時間ではなく、証拠をそろえる時間です。相手が見えないのは、あなたの落ち度ではありません。
② ステータスコードとエラー本文を読む(4xxか5xxか)
つながって返事が返るなら、次はその返事の中身です。HTTPのステータスコード(相手が結果を数字で返す約束事)とエラー本文は、どっち側かを分ける一番の手がかりです。
- 4xx(400・401・403・404・422・429 など)は「こちらの送り方」を疑う:リクエストの不備、認証切れ、権限不足、宛先間違い、項目の検証エラー、送りすぎ(レート制限)など。多くは自分側で直せます。
- 5xx(500・502・503・504 など)は「相手側」を疑う:相手のサーバーエラーや過負荷、メンテナンス。基本はこちらが待つ・問い合わせる側です。ただしこちらが極端な送り方をして相手を落としている場合もあるので、本文は必ず読みます。
- エラー本文(メッセージ)を必ず記録する:ステータスコードだけでなく、相手が返す「どの項目がダメか」の説明文にこそ答えがあります。
missing parameter、invalid signature、expired tokenなど、本文が次の一手を教えてくれます。
ここで4xxで、本文に「この項目が足りない/不正」と書いてあるなら、犯人は自分側(の送り方)です。5xxやメンテナンス表示なら、相手側の問題として動きます。コードは、どちらか決まってから読み始めれば十分です。
③ 認証・期限を疑う(トークン切れ・鍵・IP制限)
「昨日まで動いていたのに、コードは変えていない」の犯人で多いのが、この層です。時間の経過で失効するものは、こちらが何もしなくても、ある日から急に止まります。
- トークン・APIキーの期限:アクセストークンの有効期限切れ、キーの再発行・失効。更新の仕組みが止まっていないかを見ます。
- 証明書の期限:相手または自分側のSSL/TLS証明書の期限切れで、通信自体が拒否されることがあります。
- IP制限・許可リスト:自分側のサーバーIPが変わった、相手が許可リストを更新した、といった「許可の外れ」で急に弾かれます。
- 相手のレート制限(429):送りすぎで一時的に止められている場合。リトライの間隔や同時実行数を見直します。
この層は、「いつから」動かないかが強い手がかりになります。特定の日時からきれいに止まっているなら、その時刻に期限が切れた・鍵が変わった・IPが変わった可能性を疑います。
④ 相手の障害情報・仕様変更を確かめる(自分の外の事情)
手前を全部そろえて「どうやら相手側だ」となったら、相手の状況を一次情報で確かめます。ここまで来れば、動くべき相手(相手先のサポート)がはっきりしています。
- 相手のステータスページ・障害情報を見る:多くのサービスは稼働状況ページを公開しています。相手が障害を認めていれば、こちらは待つ・回避する側だと確定します。
- 仕様変更・非推奨の告知を探す:エンドポイントの変更、項目の追加、旧バージョンの終了(廃止予告)などが告知されていないか。連携の「仕様変更のお知らせ」は見落としがちです。
- 問い合わせるなら証拠を添える:相手に連絡するときは、①いつ ②送ったリクエスト ③返ってきたステータスと本文、をそろえて伝えると、やり取りが一気に速くなります。
この層に来たら、自分側を無理にいじらないのが安全です。相手側の問題を自分のコードで力技回避すると、相手が直したときに今度はその回避策が事故になります。まずは「相手が直るまでの一時対処(リトライ・キュー・ユーザーへの案内)」と「恒久対応(相手復旧後に戻す)」を分けて考えます。
具体例:「決済APIが夕方から急にエラーになる」
よくある報告で、順番に切り分けてみます。
- ①疎通:サーバーから決済APIのエンドポイントへ手動でリクエスト。ちゃんとつながって返事は返る。経路は問題なし。
- ②返事:返ってきたのは401で、本文に「トークンの有効期限が切れています」。5xxではないので、まず自分側を疑う番。
- ③認証:アクセストークンを定期更新するバッチのログを確認すると、夕方の更新ジョブがエラーで止まっていた。トークンが失効したまま古いものを使い続けていたと判明。
- ④相手:相手のステータスページは正常。仕様変更もなし。相手側障害ではなく、こちら側のトークン更新の失敗が原因と確定。
犯人は「決済APIの障害」ではなく、②の返事(401)を入り口に、③の認証(トークン更新バッチの停止)でした。もし最初から決済処理のコードを読み込んでいたら、コードは正しいので迷子になっていたはずです。手前から「返事の中身」を押さえて「どっち側か」を分けたからこそ、見るべき場所(更新バッチ)が一気に絞れました。
影響:切り分けの順番を持つと、何が変わるか
「どっち側か」を分ける順番を1枚持っておくと、直す力そのものより先に、焦りと板挟みが減ります。
- 「自分のバグかもしれない」と抱え込む前に、「まず返事を見て、どっち側かを分ける」と立ち止まれる。
- 相手側だと分かれば、根拠(ステータスと本文)を添えて相手に連絡でき、社内にも「相手側の障害です」と自信を持って報告できる。
- 自分側だと分かれば、経路・認証・送り方のどこかに絞れるので、コードを闇雲に読む時間が減る。
- 相手側の問題を自分のコードで力技回避して、あとで二重に壊す——いちばん危ない対応を避けられる。
逆に、順番を持たずに毎回「とりあえずコードを読み返す」だけだと、実は相手側の障害だった日に半日を溶かす、ということが起きます。順番は、宙ぶらりんな時間を短くする道具です。
明日やること:連携の「切り分けメモ」を1枚作る
立派な設計書は要りません。明日できる、いちばん小さな一歩はこれです。
- いま連携している外部APIについて、「返事を1回、そのまま記録する」方法を確かめる(ステータスコードとエラー本文がログに残るか)。残っていなければ、まずそこを残す設定にする。
- 上の①疎通→②返事→③認証→④相手の順に、「トラブル時にどこを見るか」を1行ずつ書き出す。
- 「いつから動かないか」を確認する場所(相手のステータスページのURL、トークン更新ジョブのログの場所)を、メモに控えておく。
- 次に不具合が来たら、コードを開く前に②の返事をまず1回つかまえて、4xxか5xxかで「どっち側か」を分ける。
- 分けた結果と対応(自分側で直した/相手に連絡した)を1行残す。次の連携トラブルで、同じ手探りをしないで済みます。
きれいにまとめなくて大丈夫です。「返事をどこで見て、どっち側かをどう分けるか」の1枚があるだけで、次の自分(や相談する相手)が、いちばんつらい宙ぶらりんの時間を短くできます。
「外部API連携トラブル」切り分けチェックリスト
調査に着手するとき、これだけ確認できているかを見る項目です。コピーして、自分のメモに当ててみてください。全部を毎回そろえる必要はありません。
まず外せない最低ラインはこの3つです。焦っていても、ここだけは押さえます。
- 【最低ライン】コードを書き換える前に、相手からの「返事(ステータスコードとエラー本文)」を実際に見たか
- 【最低ライン】4xx(自分側が疑わしい)か 5xx(相手側が疑わしい)かで、まず「どっち側か」を分けたか
- 【最低ライン】「いつから動かないか」を確認したか(急な失効・仕様変更の手がかり)
次の項目は、手前で切り分かないとき・相手側が疑わしいときに追加で確認します。当てはまらなければ飛ばして大丈夫です。
- アプリを介さず手元から直接叩いて、届く/届かないを確認したか(自分側の送り方か経路かを分ける)
- タイムアウトなのか接続拒否なのかを区別したか(相手の負荷か、あいだの経路か)
- トークン・APIキー・証明書の期限、IP制限、レート制限(429)を確認したか
- 相手のステータスページ・障害情報・仕様変更の告知を確認したか
- リトライで二重送信になっていないか(同じ処理が重複して実行されていないか)を確認したか
- 相手側が原因のとき、一時対処(待つ・案内する)と恒久対応(相手復旧後に戻す)を分けたか
全部に○が付かなくても大丈夫です。最低ラインの3つ、とくに「相手の返事を1回そのまま見る」さえ押さえられれば、自分のせいかと抱え込んで消耗するより、ずっと確かな一歩になります。
よければ、こちらも
外部API連携のトラブルは、「返事を1回つかまえて、どっち側かを分ける」ところまで来れば、あとは原因調査の技が効いてきます。返事を残すログの見どころと、原因特定・記録の残し方をセットにしておくと、次の「急に動かない」がだいぶ軽くなります。
- 大量ログからエラーを絞り込む|grep・tail・lessの実務術:返ってきたステータスや本文を、ログから素早く拾い出す見方をまとめています。
- バグ報告から再現・原因特定までの最短ルート|落ち着いて追う手順:どっち側かを分けたあと、原因までを最短でたどる考え方を整理しています。
- 問い合わせ対応を「調査ログ」として残して資産にする方法:相手への連絡や社内報告に使える、対応の記録の残し方をまとめています。

外部API連携のトラブルがこわいのは、原因が自分の見えないところにあるかもしれないまま、自分のせいかと抱え込んでしまうからです。でも、まず相手の返事を1回つかまえて、①疎通→②返事→③認証→④相手の順に「どっち側か」を分けると決めるだけで、霧はかなり晴れます。多くの場合、あなたのコードは正しくて、ただ相手側の事情や期限切れが隠れていただけです。 今日は、連携している外部APIの「返事がログに残っているか」を確かめるところからで十分です。その1枚が、次の「急に動かない」を、宙ぶらりんな時間ではなく手順に変えてくれます。
ほかの実務ヒントは記事一覧からどうぞ。保守運用の小さな備えを、メールでも少しずつお届けしています。