오류 코드
다음은 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
만 반환해야 합니다. 이러한 기능은 모두 오류를 추적하고, 요청을 수정하고, 다시 시도하는 것을 통해 복구할 수 있지만, 스마트 코딩 사례를 사용하면 이러한 기능이 야생에서 발생하지 않아야 합니다.
Marketo은 요청 페이로드가 1MB를 초과하는 경우 413, 리드 가져오기의 경우 10MB를 반환합니다. 대부분의 시나리오에서는 이러한 제한에 도달할 가능성이 낮지만 요청 크기에 대한 검사를 추가하고 레코드를 이동하면 제한이 새 요청으로 초과되어 종단점에서 이 오류가 반환되는 상황을 방지해야 합니다.
GET 요청의 URI가 8KB를 초과하면 414가 반환됩니다. 이를 방지하려면 쿼리 문자열의 길이를 확인하여 이 제한을 초과하는지 확인하십시오. 요청을 POST 메서드로 변경한 경우 쿼리 문자열을 추가 매개 변수 _method=GET
과(와) 함께 요청 본문으로 입력합니다. URI에 대한 제한을 무시합니다. 대부분의 경우 이 제한에 도달하는 것은 드물지만 GUID와 같은 긴 개별 필터 값이 있는 큰 레코드 일괄 처리를 검색하는 경우에는 다소 일반적입니다.
ID 끝점은 승인되지 않은 401 오류를 반환할 수 있습니다. 이는 일반적으로 잘못된 클라이언트 ID 또는 잘못된 클라이언트 암호 때문입니다. HTTP 수준 오류 코드
응답 수준 오류
응답의 success
매개 변수가 false로 설정되어 있으면 응답 수준 오류가 표시되며 다음과 같이 구성됩니다.
{
"requestId": "e42b#14272d07d78",
"success": false,
"errors": [
{
"code": "601",
"message": "Unauthorized"
}
]
}
"errors" 배열의 각 개체에는 두 개의 멤버 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"
}
]
}
]
}
호출 결과 배열에 포함된 레코드는 요청의 입력 배열과 동일한 방식으로 정렬됩니다.
성공적인 요청의 각 레코드는 개별적으로 성공하거나 실패할 수 있으며, 이는 응답의 결과 배열에 포함된 각 레코드의 상태 필드에 의해 표시됩니다. 이러한 레코드의 "상태" 필드는 "생략"되며 "이유" 배열이 있습니다. 각 이유에는 "code" 멤버와 "message" 멤버가 포함되어 있습니다. 코드는 항상 1xxx이며 메시지는 레코드가 생략된 이유를 나타냅니다. 예를 들어 동기화 리드 요청에 "action"이 "createOnly"로 설정되어 있지만 제출된 레코드의 키 중 하나에 대한 리드가 이미 있는 경우가 있습니다. 이 경우 코드 1005를 반환하며 위에 표시된 대로 "Lead 가 이미 존재합니다" 라는 메시지를 반환합니다.