错误代码
以下是REST API错误代码列表,并说明如何将错误返回给应用程序。
处理和记录异常
在针对Marketo进行开发时,如果遇到意外异常,请务必记录请求和响应。 虽然重新身份验证可以安全地处理某些类型的异常(例如过期的身份验证),但其他异常可能需要支持交互,在此情况下将始终请求请求和响应。
错误类型
在正常操作下,Marketo REST API可以返回三种不同类型的错误:
- HTTP级别:这些错误由
4xx
代码指示。 - 响应级别:这些错误包含在JSON响应的“错误”数组中。
- 记录级别:这些错误包含在JSON响应的“result”数组中,并且是以“status”字段和“reasons”数组单独记录为基础指示的。
对于响应级别和记录级别错误类型,返回HTTP状态代码200。 对于所有错误类型,不应评估HTTP原因短语,因为它是可选的且可能会发生更改。
HTTP级别错误
在正常操作情况下,Marketo应仅返回两个HTTP状态代码错误: 413 Request Entity Too Large
和414 Request URI Too Long
。 通过捕获错误、修改请求和重试,这些都可恢复,但通过智能编码实践,您绝不应该在野外遇到这些情况。
如果请求有效负载超过1MB,Marketo将返回413,对于Import Lead将返回10MB。 在大多数情况下,不会达到这些限制,但是如果向请求的大小添加检查,并移动任何记录,导致超过新请求的限制,则应防止出现任何情况,这种情况会导致任何端点返回此错误。
当GET请求的URI超过8KB时,将返回414。 要避免出现这种情况,请检查查询字符串的长度,看看是否超过此限制。 如果它确实将您的请求更改为POST方法,则使用附加参数_method=GET
将您的查询字符串输入为请求正文。 这放弃了URI的限制。 在大多数情况下,很少达到此限制,但在检索具有长单个过滤器值(如GUID)的大量记录时,这种情况比较常见。
标识终结点可能返回401未授权错误。 这通常是由于无效的客户端ID或无效的客户端密钥。 HTTP级别的错误代码
响应级别错误
将响应的success
参数设置为false时,将出现响应级别错误,其结构如下所示:
{
"requestId": "e42b#14272d07d78",
"success": false,
"errors": [
{
"code": "601",
"message": "Unauthorized"
}
]
}
“错误”数组中的每个对象都有两个成员,code
,它是从601到799的带引号的整数,一个message
提供了错误的纯文本原因。 6xx代码始终指示请求完全失败并且未执行。 例如,“访问令牌无效”601可通过重新身份验证并使用请求传递新访问令牌而恢复。 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"
}
]
}
]
}
调用结果数组中包含的记录的排序方式与请求的输入数组相同。
成功请求中的每个记录都可能在单独的基础上成功或失败,响应结果数组中包含的每个记录的状态字段即表示这一点。 将“跳过”这些记录的“状态”字段,并存在“原因”数组。 每个原因都包含一个“代码”成员和一个“消息”成员。 代码始终为1xxx,该消息指示跳过记录的原因。 例如,同步潜在客户请求的“action”设置为“createOnly”,但已提交的记录中的某个键已存在潜在客户。 此案例会返回一个代码1005,并显示一条消息“Lead already exists”(商机已存在),如上所示。