更新时间:2024-06-12 GMT+08:00

Java

操作场景

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

本章节以Eclipse 4.5.2版本为例介绍。

图1 调用流程

前提条件

  • 已获取API的域名、ID、请求url、请求方法、AppKey和AppSecret等信息,具体参见认证前准备
  • 已安装Eclipse 3.6.0或以上版本,如果未安装,请至Eclipse官方网站下载。

获取SDK

  1. 登录DataArts Studio控制台。
  2. 单击“数据服务”模块。
  3. 单击左侧菜单“专享版 > SDK”。
  4. 单击SDK使用引导区域里对应语言的SDK,下载SDK包到本地。
  5. 进行SDK包完整性校验。Windows操作系统下,打开本地命令提示符框,输入如下命令,在本地生成已下载SDK包的SHA256值,其中,“D:\java-sdk.zip”为SDK包的本地存放路径和SDK包名,请根据实际情况修改。

    certutil -hashfile D:\java-sdk.zip SHA256

    命令执行结果示例,如下所示:

    SHA256 的 D:\java-sdk.zip 哈希:
    3a86f1ba249a00727db506e4075ec9630e6cf74f312bddf6c3901c9d0786f53e
    CertUtil: -hashfile 命令成功完成。
    3a86f1ba249a00727db506e4075ec9630e6cf74f312bddf6c3901c9d0786f53e

    对比所下载SDK包的SHA256值和下表中对应语言SDK包的SHA256值。如果一致,则表示下载过程不存在篡改和丢包。

    表1 SDK包及对应的SHA256值

    不同语言SDK包

    SHA256

    Java

    3a86f1ba249a00727db506e4075ec9630e6cf74f312bddf6c3901c9d0786f53e

    Go

    23734867eae2e7ef61427c64aa33aa89512571946f2f43a1a5fef5e801e3129f

    Python

    57636d8bacc459cab9dc08c70d01ccc42391ace60e6960c4e947566da1dc5d26

    C#

    e5a3b677f75c28ba3f1e16645d8171f7b6f34a42143f8a32a68bb18719b5e65d

    JavaScript

    442ac2fcb41d84525dc0139ec3f05d190e4e337cdbcdfdfc82a09d79d2ecd25e

    PHP

    2cc76bd2ecd48f00899d18b0f76d05ce2623065180f111c3f70ac14ddf0506f3

    C++

    2a54c3f2486d562ea6af1384eca40b301918bdc02f98bbf2c114f282dc059c00

    C

    4957556c108e0174d55b4b8d720f296967a9367ca54010792b1b3de039b87363

    Android

    0fdcc6fd93a68dce5c3e1b8e6370cc9340429cabfb0f268c3f9e5ea05238ae96

获取“ApiGateway-java-sdk.zip”压缩包,解压后目录结构如下:

名称

说明

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

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

.classpath

Java工程配置文件

.project

导入工程

  1. 打开Eclipse,在菜单栏选择“File > Import”。

    弹出“Import”对话框。

  2. 选择“General > Existing Projects into Workspace”,单击“Next”。

    弹出“Import Projects”对话框。

    图2 Import

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

    图3 选择demo工程

  4. 单击“Finish”,完成工程导入。

    最终工程目录结构如下:

    图4 导入工程的目录结构

    “Main.java”为示例代码,请根据实际情况修改参数后使用。具体代码说明请参考调用API示例

新建工程

  1. 打开Eclipse,在菜单栏选择“File > New > Java Project”。

    弹出“New Java Project”对话框。

  2. 自定义“Project name”,以“java-sdk-demo”为例,其他参数保持默认,单击“Finish”。

    图5 新建工程

  3. 导入API Gateway Java SDK的“jar”文件。

    1. 选择“java-sdk-demo”,单击鼠标右键,选择“Build Path > Add External Archives”。
      图6 导入jar文件
    2. 选择SDK中“\libs”目录下所有以“jar”结尾的文件,单击“打开”。
      图7 选择jar文件

  4. 新建“Package”及“Main”文件。

    1. 选择“src”,单击鼠标右键,选择“New > Package”。
      图8 新建Package
    2. 在“Name”中输入“com.apig.sdk.demo”。
      图9 设置Package的名称
    3. 单击“Finish”。

      完成“Package”的创建。

    4. 选择“com.apig.sdk.demo”,单击鼠标右键,选择“New > Class”。
      图10 新建Class
    5. 在“Name”中输入“Main”,勾选“public static void main(String[] args)”。
      图11 设置Class的配置
    6. 单击“Finish”。

      完成“Main”文件的创建。

  5. 完成工程创建后,最终目录结构如下。

    图12 新建工程的目录结构

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

调用API示例

  • 示例演示如何访问发布的API。
  • 您需要在数据服务控制台自行创建和发布一个API。创建及发布API的步骤请参见创建API发布API章节。
  • 示例API的后端为打桩的HTTP服务,此后端返回一个“200”响应码及“Congratulations, sdk demo is running”消息体。
  1. 在“Main.java”中加入以下引用。

    import com.cloud.apigateway.sdk.utils.Client;
    import com.cloud.apigateway.sdk.utils.Request;
    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.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;

  2. 创建request,过程中需要用到如下参数。

    • AppKey:通过认证前准备获取。认证用的ak和sk编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全,本示例从环境变量中获取。
    • AppSecret:通过认证前准备获取。认证用的ak和sk编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全,本示例从环境变量中获取。
    • Method:请求的方法名。根据API实际情况填写,示例代码使用“POST”作为样例。
    • url:请求的url,不包含QueryString及fragment部分。域名部分请使用API所在的分组绑定的您自己的独立域名。示例代码使用“http://{apig-endpoint}/java-sdk”作为样例。
    • queryString: url携带参数的部分,根据API实际情况填写。支持的字符集为[0-9a-zA-Z./;[]\-=~#%^&_+: "]。示例代码使用“name=value”作为样例。
    • header:请求的头域。根据API实际情况填写,不支持中文和下划线。示例代码使用“Content-Type:text/plain”作为样例。
    • body:请求的正文。根据API实际情况填写,示例代码使用“demo”作为样例。

    样例代码如下:

            Request request = new Request();
            try
            {
                // 认证用的ak和sk编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
                // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量SDK_AK和SDK_SK。
                String ak = System.getenv("SDK_AK");
                String sk = System.getenv("SDK_SK");
    
                request.setKey(ak);
                request.setSecret(sk);
    
                request.setMethod("POST");
                request.setUrl("http://{apig-endpoint}/java-sdk");
                 //url地址在创建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. 对请求进行签名、新增x-Authorization头、访问API并打印结果:

    样例代码如下:
            CloseableHttpClient client = null;
            try
            {
                HttpRequestBase signedRequest = Client.sign(request);
                Header[] authorization = signedRequest.getHeaders("Authorization");
                signedRequest.addHeader("x-Authorization",authorization[0].getValue());
    
                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”,运行工程测试代码。

    图13 运行工程测试代码

  5. 在“Console”页签,查看运行结果。

    图14 调用成功后的返回信息