错误处理
SDK 可能出现的异常错误可以分成如下几类:
- 由服务端返回的错误。这类错误由服务端返回并由 SDK 处理。关于这类错误的详细细节可以参考服务 API 的 通用错误码 和各个 API 接口的具体说明。
- 由 SDK 在向服务端发出请求时出现的网络错误。这类错误包括网络连接不通,服务端返回超时等。
- 由 SDK 自身产生的、与平台及语言相关的错误,如内存溢出等。
目前,各个语言 SDK 的实现都采取抛出异常的方式处理错误。具体原则如下:
- 由如上第一或者第二类错误将会被 SDK 处理并包装在统一的 ClientException 类抛出给用户处理。
- 由如上第三类错误不会被 SDK 处理,而是直接抛出平台及语言的 Native Exception 类给用户处理。
Exception:
Exception 是 SDK 定义的、用于处理服务自身逻辑错误的异常,提供如下异常信息:
错误代码(Error Code):标示错误类型。如果是来自服务端的返回错误,则这个错误代码 API 返回的错误代码一致。如果是 SDK 网络请求错误,则其错误代码为 “RequestError”。具体请参考各个语言的完整 API 参考。错误消息(Error Message):标示错误消息。如果是来自服务端的响应错误,则这个错误消息 API 返回的错误消息一致。如果是 SDK 网络请求错误,则其错误消息为“request is failed.”。具体请参考各个语言的完整 API 参考。错误请求 ID(Request Id):标示当前错误对应于服务端的请求 ID。该 ID 只有在服务端返回错误消息时有效,否则为空字符串。用户可以在遇到错误请求时记下该请求 ID 并提供给服务团队进行问题追踪和定位。
请求失败与重试:
在使用 SDK 访问服务端时,有可能会因为网络临时中断、传输延时过程、服务端处理过慢等一系列原因导致请求失败。目前,这类错误都直接以异常抛出,服务内部并未对此做任何重试逻辑。所以,您在使用 SDK 时需要自己定义相应的处理逻辑(重试请求或者直接报错等)。
Java
public void testAll() throws ClientException {
String projectName = "myproject1";
//create project
PutProjectRequest putProjectRequest = new PutProjectRequest();
putProjectRequest.setProject(projectName);
putProjectRequest.setServiceRole("test");
String enginesStr = "[{\"Name\":\"CONVERT_OFFICE_FORMAT\",\"JobTtl\":100000},{\"Name\":\"PHOTO_PROCESS\",\"JobTtl\":100000}]";
putProjectRequest.setEngines(enginesStr);
String indexerStr = "[{\"Name\":\"FACE_GROUP\",\"Status\":\"Enable\"},{\"Name\":\"TAG\",\"Status\":\"Enable\"}]";
putProjectRequest.setIndexers(indexerStr);
PutProjectResponse putProjectResponse = client.getResponse(putProjectRequest);
assertEquals(projectName, putProjectResponse.getProject());
//get Project
GetProjectRequest getProjectRequest = new GetProjectRequest();
getProjectRequest.setProject(projectName);
GetProjectResponse getProjectResponse = client.getResponse(getProjectRequest);
assertEquals(projectName, getProjectResponse.getProject());
try {
client.getResponse(getProjectRequest);
} catch (ClientException e) {
assertEquals("InvalidProject.NotFound", e.getErrCode());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论