更新时间:2024-02-27 GMT+08:00

Java SDK使用说明

操作场景

使用Java语言调用APP认证的API时,您需要先获取SDK,然后新建工程或导入工程,最后参考调用API示例调用API。

图1 调用流程

前提条件

  • 已获取API的调用信息,具体请参见开发准备
  • 已安装开发工具和Java开发语言环境,具体请参见开发准备

获取SDK

旧版界面:登录ROMA Connect实例控制台,在“服务集成 APIC > API调用”的“SDK”页签中下载SDK。

新版界面:登录ROMA Connect实例控制台,在“服务集成 APIC > 凭据管理”的“SDKs”页签中下载SDK。

解压后目录结构如下:

名称

说明

libs\

SDK依赖库。

libs\java-sdk-core-x.x.x.jar

SDK包。

src\com\apig\sdk\demo\Main.java

使用SDK签名请求示例代码。

src\com\apig\sdk\demo\OkHttpDemo.java

src\com\apig\sdk\demo\LargeFileUploadDemo.java

.classpath

Java工程配置文件。

.project

导入工程

  1. 打开IntelliJ IDEA,在菜单栏选择“Import Project”。

    弹出“Select File or Directory to Import”对话框。

  2. 在弹出的对话框中选择解压后的SDK路径,单击“OK”。

  3. “Import project from external model”选择“Eclipse”,单击“Next”,进入下一页后保持默认连续单击“Next”,直到“Please select project SDK”页面。
    图2 Import Project
  4. 单击“Finish”,完成工程导入。
    图3 Finish
  5. 完成导入后,目录结构如下图。
    图4 目录结构

新建工程

  1. 打开IntelliJ IDEA,在菜单栏选择“Create New Project”。

    弹出“New Project”对话框。

  2. 在右侧栏中选择“Java”,单击“Next”,进入下一页。
    图5 New Project
  3. 保持默认继续单击“Next”,进入下一页,自定义“Project name”,并选择创建工程所在本地目录“Project location”。
    图6 新建工程
  4. 导入Java SDK的“jar”文件。
    1. 选择“File > Project Structure”,弹出“Project Structure”对话框。
      图7 导入jar文件
    2. 在“Project Structure”对话框中选择“Libraries > + >Java”,界面弹出“Select Library Files”对话框。
    3. 选择SDK所在目录中“\libs”目录下所有以“jar”结尾的文件,单击“ok”。
      图8 选择jar文件
    4. 选择步骤3已创建的工程,单击“ok”。
      图9 选择工程
    5. 填写jar文件所在目录的名称,单击“Apply > OK”。
      图10 jar文件目录
    6. 完成jar文件导入,导入后目录结构如下图。
      图11 目录结果
  5. 新建“Package”及“Main”文件。
    1. 选择“src”,单击鼠标右键,选择“New > Package”。
      图12 新建Package
    2. 在“Name”中输入“com.apig.sdk.demo”。
      图13 设置Package的名称
    3. 单击“OK”,完成“Package”的创建。
    4. 选择“com.apig.sdk.demo”,单击鼠标右键,选择“New > Java Class”,在“Name”中输入“Main”单击“OK”,完成“Main”文件创建。
      图14 新建Class
    5. 配置Class。
      创建完成后,打开“Main”文件,添加“public static void main(String[] args)”。
      图15 设置Class的配置
  6. 完成工程创建后,最终目录结构如下。
    图16 新建工程的目录结构

    “Main.java”无法直接使用,请根据实际情况参考调用API示例输入所需代码。

调用API示例

  • 示例演示如何访问发布的API。
  • 您需要在APIC的管理控制台自行创建和发布一个API,可以选择Mock模式。
  • 示例API的后端为打桩的HTTP服务,此后端返回一个“200”响应码及“Congratulations, sdk demo is running”消息体。
  1. 在“Main.java”中加入以下引用。
    import java.io.IOException;
    import javax.net.ssl.SSLContext;
    
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpRequestBase;
    import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContexts;
    import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
    import org.apache.http.impl.client.CloseableHttpClient; 
    import org.apache.http.impl.client.HttpClients; 
    import org.apache.http.util.EntityUtils; 
    
    import com.cloud.apigateway.sdk.utils.Client; 
    import com.cloud.apigateway.sdk.utils.Request;
  2. 创建request,过程中需要用到如下参数,参数值可参考获取API的调用信息获取。
    • Key:API所授权凭据的Key。根据实际情况填写。
    • Secret:API所授权凭据的Secret。根据实际情况填写。

      认证使用的AK和SK硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以AK和SK保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。

    • Method:请求的方法。根据API实际情况填写,示例代码使用“POST”作为样例。
    • Url:请求的url,不包含QueryString及fragment部分。域名部分请使用API所在的分组绑定的您自己的独立域名。示例代码使用“http://serviceEndpoint/java-sdk”作为样例。
    • QueryStringParam: url携带参数的部分,根据API实际情况填写。支持的字符集为[0-9a-zA-Z./;[]\-=~#%^&_+: "]。示例代码使用“name=value”作为样例。
    • Header:请求的头域。根据API实际情况填写,不支持中文和下划线。示例代码使用“Content-Type:text/plain”作为样例。如果API发布到非RELEASE环境时,需要增加自定义的环境名称,示例代码使用“x-stage:publish_env_name”作为样例。
    • Body:请求的正文。根据API实际情况填写,示例代码使用“demo”作为样例。

    样例代码如下:

            Request request = new Request();
            try
            {
                // Directly writing AK/SK in code is risky. For security, encrypt your AK/SK and store them in the configuration file or environment variables. 
                // In this example, the AK/SK are stored in environment variables for identity authentication.  
                // Before running this example, set environment variables HUAWEICLOUD_SDK_AK and HUAWEICLOUD_SDK_SK. 
                request.setKey(System.getenv("HUAWEICLOUD_SDK_AK"));
                request.setSecret(System.getenv("HUAWEICLOUD_SDK_SK"));
                request.setMethod("POST");
                request.setUrl("http://serviceEndpoint/java-sdk");
                request.addQueryStringParam("name", "value");
                request.addHeader("Content-Type", "text/plain");
                //request.addHeader("x-stage", "publish_env_name"); //如果API发布到非RELEASE环境,需要取消本行代码的注释,增加自定义的环境名称
                request.setBody("demo");
            } catch (Exception e)
            {
                e.printStackTrace();
                return;
            }
  3. 对请求进行签名,访问API并打印结果。
    样例代码如下:
            CloseableHttpClient client = null;
            try
            {
                HttpRequestBase signedRequest = Client.sign(request);
    
                //若使用系统分配的子域名访问https请求的API时,需要取消这两行代码的注释,用来忽略证书校验
                // SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).useTLS().build();
                // SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier());
    
                //若使用系统分配的子域名访问https请求的API时,需要在custom()后添加“.setSSLSocketFactory(sslSocketFactory)”,用来忽略证书校验
                client = HttpClients.custom().build(); 
       
                HttpResponse response = client.execute(signedRequest);
                System.out.println(response.getStatusLine().toString());
                Header[] resHeaders = response.getAllHeaders();
                for (Header h : resHeaders)
                {
                    System.out.println(h.getName() + ":" + h.getValue());
                }
                HttpEntity resEntity = response.getEntity();
                if (resEntity != null)
                {
                    System.out.println(System.getProperty("line.separator") + EntityUtils.toString(resEntity, "UTF-8"));
                }
    
            } catch (Exception e)
            {
                e.printStackTrace();
            } finally
            {
                try
                {
                    if (client != null)
                    {
                        client.close();
                    }
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
  4. 选择“Main.java”,单击鼠标右键,选择“Run As > Java Application”,运行工程测试代码。
    图17 运行工程测试代码
  5. 在“Console”页签,查看运行结果。
    图18 调用成功后的返回信息