更新时间: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官方网站下载。
- 已安装Java Development Kit 1.8.111或以上版本,如果未安装,请至Oracle官方下载页面下载。
获取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 |
导入工程
- 打开IntelliJ IDEA,在菜单栏选择“Import Project”。
弹出“Select File or Directory to Import”对话框。
- 在弹出的对话框中选择解压后的SDK路径,单击“OK”。
- “Import project from external model”选择“Eclipse”,单击“Next”,进入下一页后保持默认连续单击“Next”,直到“Please select project SDK”页面。
图2 Import Project
- 单击“Finish”,完成工程导入。
图3 Finish
- 完成导入后,目录结构如下图。
图4 目录结构
新建工程
- 打开IntelliJ IDEA,在菜单栏选择“Create New Project”。
弹出“New Project”对话框。
- 在右侧栏中选择“Java”,单击“Next”,进入下一页。
图5 New Project
- 保持默认继续单击“Next”,进入下一页,自定义“Project name”,并选择创建工程所在本地目录“Project location”。
图6 新建工程
- 导入Java SDK的“jar”文件。
- 选择“File > Project Structure”,弹出“Project Structure”对话框。
图7 导入jar文件
- 在“Project Structure”对话框中选择“Libraries > + >Java”,界面弹出“Select Library Files”对话框。
- 选择SDK所在目录中“\libs”目录下所有以“jar”结尾的文件,单击“ok”。
图8 选择jar文件
- 选择步骤3已创建的工程,单击“ok”。
图9 选择工程
- 填写jar文件所在目录的名称,单击“Apply > OK”。
图10 jar文件目录
- 完成jar文件导入,导入后目录结构如下图。
图11 目录结果
- 选择“File > Project Structure”,弹出“Project Structure”对话框。
- 新建“Package”及“Main”文件。
- 选择“src”,单击鼠标右键,选择“New > Package”。
图12 新建Package
- 在“Name”中输入“com.apig.sdk.demo”。
图13 设置Package的名称
- 单击“OK”,完成“Package”的创建。
- 选择“com.apig.sdk.demo”,单击鼠标右键,选择“New > Java Class”,在“Name”中输入“Main”单击“OK”,完成“Main”文件创建。
图14 新建Class
- 配置Class。
- 选择“src”,单击鼠标右键,选择“New > Package”。
- 完成工程创建后,最终目录结构如下。
图16 新建工程的目录结构
“Main.java”无法直接使用,请根据实际情况参考调用API示例输入所需代码。
调用API示例
- 示例演示如何访问发布的API。
- 您需要在APIC的管理控制台自行创建和发布一个API,可以选择Mock模式。
- 示例API的后端为打桩的HTTP服务,此后端返回一个“200”响应码及“Congratulations, sdk demo is running”消息体。
- 在“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;
- 创建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; }
- 对请求进行签名,访问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(); } }
- 选择“Main.java”,单击鼠标右键,选择“Run As > Java Application”,运行工程测试代码。
图17 运行工程测试代码
- 在“Console”页签,查看运行结果。
图18 调用成功后的返回信息
父主题: APP认证开发