
# 如何使用union-sdk增强代码的灵活度和兼容性？
使用union-sdk增强代码的灵活度和兼容性，可参照如下操作。更多sdk使用指导，请参考[SDK概述](https://support.huaweicloud.com/sdkreference-dew/dew_02_0001.html)。
```
// 1.准备访问华为云的认证信息
// 推荐手工传入项目ID。此处不传项目ID，SDK会请求IAM动态获取项目ID，既增加网络时延，又可能因为访问IAM不通导致此处抛出异常。
final BasicCredentials auth = new BasicCredentials()
        .withIamEndpoint(IAM_ENDPOINT).withAk(ACCESS_KEY).withSk(SECRET_ACCESS_KEY).withProjectId(PROJECT_ID);
// 推荐配置httpConfig。对于未提供权威CA机构签发证书的场景，此处设置能忽略校验。
// httpConfig支持注册监听器，可用于打印响应的requestId，发生异常时，可提供请求ID用于后端检索日志。
HttpConfig httpConfig = new HttpConfig().withIgnoreSSLVerification(true);
HttpListener responseListener = HttpListener.forResponseListener(listener -> {
    if (listener.statusCode() >= 400) {
        System.out.println("X-Request-ID: " +
            listener.headers().entrySet().stream()
                .filter(entry -> entry.getKey().equalsIgnoreCase("X-Request-ID"))
                .map(entry -> entry.getValue().get(0)).collect(Collectors.joining("")));
    }
});
httpConfig.addHttpListener(responseListener);
// 2.初始化SDK，传入认证信息及KMS访问终端地址
// 推荐手动配置Region ID和对应的KMS地址。如果通过枚举传入,例如KmsRegion.CN_NORTH_4，依赖后端更新SDK，不够灵活。
// 推荐此处仅初始化一次客户端，后续反复使用此对象即可。
final KmsClient kmsClient = KmsClient.newBuilder()
        .withRegion(new Region(KMS_REGION_ID, KMS_ENDPOINT)).withHttpConfig(httpConfig).withCredential(auth).build();
// 3.组装创建数据密钥请求信息
final CreateDatakeyRequest createDatakeyRequest = new CreateDatakeyRequest()
                .withBody(new CreateDatakeyRequestBody().withKeyId(keyId).withDatakeyLength(AES_KEY_BIT_LENGTH));
// 4.创建数据密钥
// 推荐进行重试，响应码为429或者大于500时重试3~5次。
final CreateDatakeyResponse createDatakeyResponse = kmsClient.createDatakeyInvoker(createDatakeyRequest)
            .retryTimes(3).retryCondition((resp, ex) -> Objects.nonNull(ex) && ServiceResponseException.class.isAssignableFrom(ex.getClass())
                && (((ServiceResponseException) ex).getHttpStatusCode() == 429
                || ((ServiceResponseException) ex).getHttpStatusCode() >= 500)).invoke();
```
