障害対応
相場 API の認証失敗(401)とレート制限(429)のトラブルシューティング
HTTP ステータスコード、レスポンス ret、Token 設定、リクエスト頻度の順に 401 認証エラーと 429 レート制限を切り分ける診断ガイド。
更新日時:
保守運営:AllTick 公式エンジニアリングチーム
対象読者:認証エラーやリクエスト制限(429)に直面している開発者
要約 · 30秒開発サマリー
まず HTTP ステータスコードとレスポンス内の ret コードを確認し、「認証・権限エラー(Token 不正、期限切れ、対象外エンドポイント)」か「リクエスト過多(レート制限)」かを切り分けます。認証エラーはリトライせず即座に設定を修正し、レート制限はリクエスト集約と指数バックオフで対処します。
01
切り分け診断フロー
1HTTP ステータスコード、レスポンス本文、リクエスト時刻をログに記録する(Token はマスクする)。
2ret が 200 以外の場合、msg の内容から認証系エラーか頻度制限エラーかを判別する。
3認証系:Token の欠落、末尾の空白・改行混入、有効期限切れを確認する。
4権限系:株式用 URL で為替銘柄を照会していないか、契約プラン内の市場かを確認する。
5頻度系:全プロセス合計の秒間リクエスト数(QPS)を計測し、プラン上限と照合する。
02
症状別の原因と対策一覧
| 症状 | 最も可能性の高い原因 | 対策 |
|---|---|---|
| 全リクエストが最初から失敗 | Token 未指定または転記ミス | Token の文字数と前後数文字を出力して確認 |
| ローカルで成功・本番で失敗 | 本番サーバーの環境変数が未設定 | デプロイ環境の環境変数・シークレット設定を確認 |
| 株式は成功・為替は失敗 | エンドポイントと資産クラスの不一致 | 為替は quote-b-api、株式は quote-stock-b-api を使用 |
| 稼働後しばらくして失敗 | QPS またはクォータ上限の超過 | リクエスト頻度を抑え、バックオフを導入 |
| 複数ワーカーで同時に失敗 | 複数プロセスが同一 Token で頻度を合算 | リクエストスケジューラを一本化またはキャッシュ導入 |
03
指数バックオフによるリトライ実装例
pythonpython
import os, random, timeimport requestsdef get_with_backoff(url: str, params: dict, retries: int = 5) -> dict: delay = 1.0 for attempt in range(retries): resp = requests.get(url, params=params, timeout=10) body = resp.json() if resp.content else {} if resp.status_code == 401 or body.get("ret") == 401: raise RuntimeError(f"認証失敗 (ret=401): {body.get('msg', 'token invalid')}") if resp.ok and body.get("ret") == 200: return body if attempt == retries - 1: raise RuntimeError(f"リトライ上限到達: status={resp.status_code} body={body}") time.sleep(delay + random.uniform(0, 0.5)) delay = min(delay * 2, 30) return {}if __name__ == "__main__": url = "https://quote.alltick.co/quote-stock-b-api/trade-tick" params = { "token": os.getenv("ALLTICK_API_TOKEN", "YOUR_API_TOKEN"), "query": '{"trace":"backoff-test","data":{"symbol_list":[{"code":"700.HK"}]}}', } print(get_with_backoff(url, params))04
リクエスト数を削減する設計アプローチ
- 1銘柄ずつリクエストせず、symbol_list に複数銘柄をまとめて一括照会する。
- リアルタイム監視用途は高頻度 REST ポーリングから WebSocket プッシュ配信へ切り替える。
- 短時間で変化しないデータはキャッシュし、複数サービス間で結果を共有する。
- 複数プロセスからのリクエストを単一のスケジューラに集約して QPS を制御する。
仕様出典と検証記録 · 2026-10-13
以下の一次資料で関連するエンドポイント、フィールド、取引所規則を確認しました。
Python コードは Python 3.14.0 の ast.parse で構文解析を通過しました。依存関係、実行互換性、ネットワーク応答の検証は含みません。
今回の確認では実際の Token による AllTick 要求や本番エンドツーエンド試験は実行していません。再現時にプラン、ライブラリ版、取引時間、ret/trace、結果を記録してください。
一次資料
導入前に再現する項目
- 未指定・失効・権限違い Token を試し、HTTP と ret/msg を別々に確認します。必ず HTTP 401/429 になるとは限りません。
- Token 共有 worker の制限を調整し、上限付き退避で恒久的認証失敗を再試行せず、匿名化 trace と時刻を残します。