一番苦労するのは「両方正常なのに、繋がらない」
API連携のトラブルで、特に原因の切り分けに苦労するのが、**「システムAも、システムBも、それぞれは正常に動いているのに、連携だけが失敗する」**というケースです。
どちらかが壊れているなら、壊れた側を調べれば済みます。しかし、両方が正常だと、どこを調べればいいのかが、分からなくなります。この種のトラブルで、原因になりやすいのは、各システムの内部ではなく、両者の「境目」の食い違いです。主に、次の4つが、よくある食い違いです。
- データの形式が、合っていない
- 必須の項目が、足りない
- 認証の情報が、違う、または期限切れになっている
- バージョンが、合っていない
(APIそのものの意味は、APIとはで解説しています。)
なぜ、原因が見えにくいのか
連携では、一方が出したデータを、もう一方が受け取って処理します。どちらも「自分は正しく動いている」ように見えるのは、お互いに、相手がどう期待しているかを、見ていないからです。
また、エラーが出ても、「連携に失敗しました」としか表示されず、どの項目が、なぜ合わなかったのかまでは、分からないことがあります。そのため、境目を、1つずつ確認していく進め方が必要になります。
確認する5項目
| 項目 | 確認すること | よくある食い違い |
|---|---|---|
| ① 認証情報 | APIキーやトークンが、正しいか、期限切れではないか。必要な権限が付いているか | テスト用のキーを、本番で使っている。権限が足りない。有効期限が切れている |
| ② データ形式 | 送るデータの構造や、項目の型が、相手の想定と合っているか | 数字が文字として送られている。日付の形式が違う。文字コードが違う |
| ③ 必須項目と値の制約 | 必須の項目が、すべて入っているか。値の範囲や長さの制限を守っているか | 必須項目が空。文字数の上限を超えている。許可されていない値 |
| ④ バージョン | 接続しているAPIの版が、想定と合っているか。仕様が変わっていないか | 古い版を使い続けている。相手側が、仕様を変更した |
| ⑤ 通信と制限 | 接続先のURLが正しいか。ネットワークの制限や、アクセス回数の制限に、かかっていないか | URLの誤り。社内ネットワークの制限。短時間に、リクエストを送りすぎている |
特に、①から④は、「両方が正常」に見えるのに、繋がらない時の、典型的な原因です。
HTTPステータスで、原因の方向を絞る
APIは、結果を「ステータスコード」という数字で返すことが多くあります。数字の意味を知っておくと、どちらの側を疑えばよいかが見えてきます。
| ステータス | 一般的な意味 | 疑う方向 |
|---|---|---|
| 400番台(400) | リクエストの内容が、正しくない | データの形式、必須項目、値の制約 |
| 401 | 認証できていない | キー・トークン・有効期限 |
| 403 | 認証はできているが、権限がない | アクセスの権限設定 |
| 404 | 指定したものが、見つからない | URL、IDの誤り、バージョン |
| 429 | リクエストが多すぎる | アクセス回数の制限(レートリミットとは) |
| 500番台 | 相手のシステム側で、問題が起きた | 相手側の障害、または想定外の入力による不具合 |
400番台は、こちらの送り方に原因があることが多く、500番台は、相手側に原因があることが多い、と覚えておくと、切り分けの出発点になります。ただし、サービスによって、使い方に違いがあるため、公式の説明も、あわせて確認してください。
切り分けの順番
闇雲に変更を加えるのではなく、次の順で、1つずつ確認します。
- まず、最小のリクエストで試す:必須項目だけを入れた、一番単純なリクエストで、動くかどうかを確認する
- 認証を、確認する:キーや権限が、使っている環境に合っているか
- 返ってきたエラーの内容を、そのまま読む:ステータスと、メッセージを、確認する
- 項目を、1つずつ足していく:最小のリクエストが成功したら、項目を1つ足しては、試す。失敗した時点の項目が、原因の候補になる
- 相手側の仕様の変更を、確認する:仕様書や、更新の案内に、変更がないか
一度に複数の箇所を変えると、何が効いたのかが分からなくなります。必ず、1回に1つだけ変えてください。