エラーコード
REST API エラーコードのリストと、エラーがアプリケーションに返される方法の説明を以下に示します。
例外の処理とログ
Marketo向けの開発を行う場合は、予期しない例外が発生した場合にリクエストと応答がログに記録されることが重要です。 特定のタイプの例外(期限切れの認証など)は再認証で安全に処理できますが、その他の例外ではサポートインタラクションが必要になる場合があり、このシナリオではリクエストと応答が常にリクエストされます。
エラータイプ
Marketo REST API は、通常の操作で次の 3 種類のエラーを返す場合があります。
- HTTP レベル:これらのエラーは
4xx
コードで示されます。 - 応答レベル:これらのエラーは、JSON 応答の「errors」配列に含まれます。
- レコードレベル:これらのエラーは JSON 応答の「結果」配列に含まれ、「ステータス」フィールドと「理由」配列を使用して、個々のレコードごとに示されます。
応答レベルおよびレコードレベルのエラータイプの場合、HTTP ステータスコード 200 が返されます。 すべてのエラータイプについて、HTTP 理由フレーズはオプションであり、変更される可能性があるので、評価しないでください。
HTTP レベルのエラー
通常の操作環境では、Marketoは、2 つの HTTP ステータスコードエラー(413 Request Entity Too Large
と 414 Request URI Too Long
)のみを返す必要があります。 これらは、エラーをキャッチし、リクエストを変更して再試行することで復元できますが、スマートコーディングの手法を使用すると、野生で発生することはありません。
リクエストペイロードが 1MB を超える場合はMarketoから 413、読み込みリードの場合は 10MB が返されます。 ほとんどのシナリオでは、これらの制限に達する可能性はほとんどありませんが、リクエストのサイズにチェックを追加して、制限を超える原因となるレコードを新しいリクエストに移動すると、状況が防がれ、このエラーがすべてのエンドポイントで返されます。
GETリクエストの URI が 8 KB を超える場合は 414 が返されます。 これを回避するには、クエリ文字列の長さとの照合で、この制限を超えていないかどうかを確認します。 リクエストがPOSTメソッドに変わる場合は、追加のパラメーター _method=GET
を使用して、リクエスト本文としてクエリ文字列を入力します。 これは、URI に関する制限はありません。 ほとんどの場合、この制限に達することはまれですが、GUID などの長い個々のフィルター値を持つレコードを大量に取得する場合は、やや一般的です。
ID エンドポイントは、401 Unauthorized エラーを返す場合があります。 これは通常、無効なクライアント ID または無効なクライアントシークレットが原因です。 HTTP レベルのエラーコード
応答レベルのエラー
応答レベルのエラーは、応答の success
パラメーターが false に設定されている場合に発生し、次のような構造になっています。
{
"requestId": "e42b#14272d07d78",
"success": false,
"errors": [
{
"code": "601",
"message": "Unauthorized"
}
]
}
「errors」配列内の各オブジェクトには、code
という 2 つのメンバーがあります。これは 601 ~ 799 の引用符で囲まれた整数で、エラーの理由をプレーンテキストで示す message
です。 6xx コードは常に、リクエストが完全に失敗し、実行されなかったことを示します。 例えば、601 「Access token invalid」は、再認証を行い、リクエストを含む新しいアクセストークンを渡すことで回復できます。 7xx エラーは、データが返されなかったか、リクエストが正しくパラメーター化されていない(無効な日付が含まれている、必要なパラメーターが欠落しているなど)ために、リクエストが失敗したことを示します。
応答レベルのエラーコード
この応答コードを返す API 呼び出しは、毎日の割り当てまたはレート制限に対してカウントされません。
この呼び出しは、テンプレートを使用せずにメールを作成しようとする場合など、アセットを作成または更新する要件に違反するので、実行できません。 また、次の操作を行おうとすると、このエラーが発生する場合があります。
- ソーシャルコンテンツを含むランディングページのコンテンツを取得します。
- 特定のアセットタイプを含むプログラムのクローンを作成します(詳しくは プログラムクローンを参照してください)。
- ドラフトのないアセット(つまり、既に承認されているアセット)を承認します。
レコードレベル record_level_errors
レコードレベルのエラーは、個々のレコードに対して操作を完了できなかったが、リクエスト自体は有効だったことを示します。 レコードレベルのエラーを含んだ応答は、次のパターンに従います。
応答
{
"requestId":"e42b#14272d07d78",
"success":true,
"result":[
{
"id":50,
"status":"created"
},
{
"id":51,
"status":"created"
},
{
"status":"skipped",
"reasons":[
{
"code":"1005",
"message":"Lead already exists"
}
]
}
]
}
呼び出しの結果配列に含まれるレコードは、リクエストの入力配列と同じ方法で並べられます。
成功したリクエストの各レコードは、個々に成功または失敗する可能性があります。これは、応答の結果配列に含まれる各レコードのステータスフィールドで示されます。 これらのレコードの「ステータス」フィールドは「スキップ」され、「理由」配列が存在します。 各理由には、「code」メンバーと「message」メンバーが含まれます。 このコードは常に 1xxx で、メッセージはレコードがスキップされた理由を示します。 例えば、リードの同期リクエストで「action」が「createOnly」に設定されているものの、送信済みレコードのいずれかのキーのリードが既に存在する場合です。 この場合、コード 1005 が返され、上記のように「Lead already exists」というメッセージが表示されます。