コンテンツにスキップ
Taylorz CRM Developers
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

エラー

2 つの拒否の形、各ステータスコードの意味、再試行の価値がある拒否、そして検証の失敗がほとんど何も語らない理由を説明します。

拒否は JSON です。形は 2 つあります。

ほとんどはメッセージのみを持ち、これは人向けではなくログ向けです。

{ "error": "Invalid request" }

ドメインの拒否は、機械が読める理由も持ちます。

{
  "code": "conflict",
  "error": "Settings changed; reload before saving",
  "reason": "settings_stale"
}

まずステータスで分岐し、code と reason があればそれで分岐してください。error では行わないでください。 最初の形の拒否はどちらも持たないため、reason を無条件に読むコードはそこで壊れます。メッセージは文章であり書き換えられることがあります。code は invalid_input、not_found、conflict、forbidden のいずれかで、reason は安定したスラッグです。拒否によっては、何が失敗したかをより詳しく示す detail オブジェクトを持ちます。

各ステータスの意味

ステータス 意味 再試行
400 ボディ、クエリ、またはパラメータが拒否された リクエストを変えるまでは不可
401 トークンが欠落、無効、期限切れ、または失効 可。更新して送り直す(1 回)
403 モジュールが無効、またはスコープか役割がそのアクションを許可しない 不可
404 該当するレコードがない、または読めるものがない 不可
409 リビジョンの競合、冪等性キーの再利用、または操作を禁じる状態 読み直してリクエストを変えた後のみ
413 ボディが制限を超えた 不可
500 予期しない障害 可。バックオフを入れて

403 はステータスだけでは「役割が許可しない」と「モジュールが無効」を区別しません。reason を読んでください。external_api_disabled はワークスペースの api モジュールが無効であることを、permission_required はスコープか役割が問題であることを意味します。

404 と 403 は、同じ状況を別の角度から見たものである場合があります。読む権限のないレコードは、存在を認めるのではなく 404 を返します。

検証の失敗が多くを語らない理由

拒否されたボディは、項目名を示さずに 400 {"error":"Invalid request"} を返します。これは意図的です。この API はリクエストをそのまま返さず、実行した内部検証の一覧も示しません。そのエンドポイントのスキーマについてはリファレンスと照合してください。

安全な再試行

Idempotency-Key を取るエンドポイントは、タイムアウトや 500 の後の再試行が安全です。同じキーを再利用すれば、サーバーは処理を行うか、すでに返した応答を再生します。再試行のために新しいキーを生成することが、重複を生む原因です。

キーを取らないエンドポイント — 価格プレビュー、ダウンロードリンク、POST /api/v1/bootstrap — では、再試行はリクエストをそのまま繰り返します。この 4 つはいずれも 2 回目の呼び出しで何かを作成することはありませんが、処理が二度行われることを妨げるものもありません。

このページは役に立ちましたか?