更新时间:2023-04-23 GMT+08:00

Java SDK使用说明

操作场景

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

本章节以IntelliJ IDEA 2018.3.5版本为例介绍。

图1 调用流程

前提条件

  • 已获取API的域名、请求url、请求方法、集成应用的Key和Secret(或客户端的AppKey和AppSecret)等信息,具体参见认证前准备
  • 获取并安装2018.3.5或以上版本的IntelliJ IDEA,如果未安装,请至IntelliJ IDEA官方网站下载。

获取SDK

请登录ROMA Connect实例控制台,在“服务集成 APIC > API调用”页面中下载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”中加入以下引用。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    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,过程中需要用到如下参数。

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

    样例代码如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
            Request request = new Request();
            try
            {
                request.setKey("4f5f626b-073f-402f-a1e0-e52171c6100c"); //创建集成应用时得到
                request.setSecret("*****"); //创建集成应用时得到
                request.setMethod("POST");
                request.setUrl("http://serviceEndpoint/java-sdk");
                 //url地址在创建API时得到
                 //子域名在创建API分组时得到
                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并打印结果。

    样例代码如下:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
            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 调用成功后的返回信息