
# 调用API
不同认证方式的API支持的调用方式也有所不同，详见[表1](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0309.html#dataartsstudio_01_0309__table1196445593713)。本示例以SDK调用APP认证方式为例，详细介绍如何通过JAVA SDK调用API。
#### 前提条件
- 已完成API开发，已通过API审核。
- 已通过应用授权APP认证方式授权API调用。
- 已完成JAVA开发环境搭建，安装Java Development Kit 1.8.111或以上版本，如果未安装，请至[Oracle官方下载页面](https://www.oracle.com/technetwork/java/javase/downloads/index.html)下载。
- 获取并安装IntelliJ IDEA，如果未安装，请至[IntelliJ IDEA官方网站](https://www.jetbrains.com/idea/)下载。
 
#### 约束与限制
- 如需在本地调用专享版API，则需在创建专享版集群时绑定一个弹性公网IP，作为实例的公网入口。共享版API默认可通过公网访问。
- 调用数据服务API时，如果查询及返回数据的总时长超过默认60秒则会报超时错误。此时可通过访问日志中的API调用时长信息，根据超时阶段进一步优化API配置。
 
#### 获取APP和API信息
1. [登录DataArts Studio管理控制台](https://console.huaweicloud.com/dayu/)。
   
   详情请参考[访问DataArts Studio实例控制台](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0001.html)。
   
   
2. 在DataArts Studio控制台首页，选择对应工作空间的"数据服务"模块，进入数据服务页面。
3. 在左侧导航栏选择服务版本（例如：专享版），进入总览页。
4. 获取API授权应用的AppKey和AppSecret（如已授权多个APP，获取其中一个APP信息即可）。 
   在左侧导航栏中进入应用管理，找到API授权的应用，并单击应用名称查看APP的完整信息，保存AppKey和AppSecret。
   图1保存AppKey和AppSecret信息   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002529714991.png "点击放大")
   
   
   
5. 获取待调用API的调用地址、请求方法和入参信息。 
   在左侧导航栏中进入API管理，找到待调用的API，单击API名称查看API的完整信息，保存调用地址、请求方法和入参信息。
   专享版支持内网地址和外网地址（外网地址需要您在创建集群时绑定弹性IP），如果需要在本地调用专享版API，需要使用外网地址，确保网络互通。共享版使用APIG地址，可直接选择该地址进行调用。
   图2保存调用地址、请求方法和入参信息   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002533389277.png "点击放大")
   
   
   
 
#### 获取SDK包
1. 在数据服务页面，单击左侧导航栏的"SDK"，然后下载Java SDK。 
   图3下载SDK   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002524856571.png "点击放大")
   
   
   
2. 进行SDK包完整性校验。Windows操作系统下，打开本地命令提示符窗口，输入如下命令，在本地生成已下载SDK包的SHA256值，其中，"D:\\java-sdk.zip"为SDK包的本地存放路径和SDK包名，请根据实际情况修改。 
   ```
   certutil -hashfile D:\java-sdk.zip SHA256
   ```
   命令执行结果示例，如下所示：
   ```
   SHA256 的 D:\java-sdk.zip 哈希:
   96fced412700cf9b863cb2d867e6f4edf76480bc679416efab88a9e1912503b9
   CertUtil: -hashfile 命令成功完成。
   ```
   对比所下载SDK包的SHA256值和下表中对应语言SDK包的SHA256值。如果一致，则表示下载过程不存在篡改和丢包。
   表1SDK包及对应的SHA256值 
   | 不同语言SDK包   | SHA256值                                                          |
   |:---|:---|
   | Java       | 96fced412700cf9b863cb2d867e6f4edf76480bc679416efab88a9e1912503b9 |
   | Go         | f448645da65b4f765d9569fc97ca45dc3e8f1ce4f79d70c5c43934318521d767 |
   | Python     | 54b4984d91db641d2b1b0e77064c162850cb2511a587f95e2f8b8340e7afa128 |
   | C#         | b66caf856ffccb61fe758872aac08876aa33fb0cf5f4790e3bec163593b2cbae |
   | JavaScript | 43da0b54d6b04d1f5ed7f278c2918c2a63a1ddb8048e2d1c5db60baafb17663c |
   | PHP        | 394c068420a3817f32d5d88b6c1632978f573f2a685e4a1d10c2f698e0f6786e |
   | C++        | abae5473d47594f88dcd5eaa0902dc12cd6f1e3bd63c0b82d9d1fab8b4351f54 |
   | C          | a376573fe8aa3a636a6d123926ddc3dca11748b289b8c2c16a5056830a095acb |
   | Android    | c19175d736f05b1945dab4675df19311834ede0d9b1978b11b50c86687baf85c |
      
   
   
 
#### 通过SDK调用API
1. 解压获取的Java SDK包，并在IntelliJ IDEA中导入SDK工程。
2. 导入成功后，打开main.java文件，修改如下图红框所示的内容： 
   图4修改main.java   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002533758733.png "点击放大")
   - **设置API的请求方法和调用地址。**
     注意如果入参中包含Path参数，则需要将调用地址中的**{path}** 变量修改为具体取值。本示例参考如下进行设置：
     ```
     request.setMethod("GET");
     request.setUrl("https://xx.xx.xx.xx/TestScore");
     ```
     
   
   - **设置Query、Header和Body参数的取值。**
     注意Body参数需要使用双引号和大括号**"{}"** 将""***Body参数名*** ":***Body参数值*** "形式的字符串包围在内，且其内字符串中的双引号**""**需要使用\\进行转义。因本示例不涉及Body参数，可以将setBody调用方法注释掉。addQueryStringParam调用方法参考如下进行设置：
     - 查询所有考生英语考试成绩。 无需传入Query参数，可以将addQueryStringParam调用方法注释或直接删除。
       
     
     - 查询特定考生的成绩。
       ```
       request.addQueryStringParam("Number", "xxxxxx");
       ```
       
     
     - 查询特定考生是否通过英语考试。通过考试的分数线，以425为例。
       ```
       request.addQueryStringParam("Number", "xxxxxx");
       request.addQueryStringParam("Score", "425");
       ```
       
     
     - 查询通过英语考试的考生名单。通过考试的分数线，以425为例。
       ```
       request.addQueryStringParam("Score", "425");
       ```
       
     
     - 对通过英语考试的考生名单按成绩高低进行排序。通过考试的分数线，以425为例。
       ```
       request.addQueryStringParam("Score", "425");
       ```
       
      
   
   - **（可选）设置排序参数取值。**
     系统会根据排序参数信息给出默认排序情况，自定义排序默认为升序。如果需要修改排序，可以修改pre_order_by参数的值为"***排序参数参数名*** :ASC"或"***排序参数参数名***:DESC"，其中ASC表示升序，DESC表示降序，多个排序参数描述以"英文分号"进行分隔。
     本示例对通过英语考试的考生名单按成绩高低进行排序时，参考如下进行设置，其他查询无需设置。
     ```
     request.addQueryStringParam("pre_order_by", "Score:DESC");
     ```
     
   
   - **（可选）设置分页参数。**
     默认情况下，对于配置方式和默认分页的脚本/MyBatis方式API，系统将默认赋值返回量。如果想获取特定分页数据，可以修改如下参数设置分页，其中pageSize表示分页后的页面大小，pageNum表示页码。
     本示例可以不设置。
     ```
     request.addQueryStringParam("page_size", "100");
     request.addQueryStringParam("page_num", "1");
     ```
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     自定义分页的脚本/MyBatis方式API是在创建API时将分页逻辑写到取数SQL中，因此不支持在调用时修改分页设置。
     
   
   - **（可选）设置返回总条数。**
     在创建API时，如果已打开"返回总条数"开关，则当API对应的数据表数据量较大时，获取数据总条数将会比较耗时。如果需要在调用时不计算并返回数据总条数，可以修改use_total_num参数用于控制是否计算并返回数据总条数，值为1返回数据总条数，值非1不返回数据总条数。
     本示例前面未打开"返回总条数"开关，可以不设置。
     ```
     request.addQueryStringParam("use_total_num", "0");
     ```
     
   
   
   
   
3. 配置AppKey和AppSecret。由于认证用的AppKey和AppSecret编码到代码中或者明文存储都有很大的安全风险，因此建议在配置文件或者环境变量中存放，确保安全，本示例从环境变量中获取。 
   图5配置AppKey和AppSecret   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002531921787.png "点击放大")
   
   
   
4. 运行程序后，查看API调用结果。200消息中的**"errCode":"DLM.0"** 即表示API调用成功。如果失败，则请根据报错信息进行修复。
   
   图6运行程序   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002533759185.png "点击放大")
   
   
 
