
# 通过API工具调用APP认证方式的API
APP认证方式的API接口可以分别绑定不同的应用，安全级别最高。如果您需要API工具调用APP认证方式的API，则需要先通过JavaScript SDK包中的demo.html手动生成认证信息，再使用API工具调用。
本章节以Postman工具为例，为您介绍如何使用API工具调用APP认证方式的API，主要包含如下几步：
1. [获取APP和API信息]：准备APP和API关键信息，用于API调用。
2. [获取JavaScript SDK包]：下载JavaScript SDK包并进行完整性校验。
3. [生成认证信息]：通过JavaScript SDK包中的demo.html手动生成认证信息。
4. [调用API]：通过Postman工具调用API。
 
#### 前提条件
- 已完成APP认证方式的API或API工作流的发布，在服务目录中可以查看已发布的API。
- 已完成创建应用并将API授权给应用，即API开发者已完成[通过应用授权APP认证方式API](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0333.html)，或API调用者已完成[申请API授权](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0334.html)。
- 如果API中入参定义了Static参数，则在API授权时已配置Static参数值。
- 本章以Postman工具为例，因此需要已安装Postman工具，如果未安装，请至[Postman官方网站](https://www.postman.com/)下载。
 
#### 约束与限制
- APP认证方式的API调用前必须先完成[通过应用授权APP认证方式API](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0333.html)或[申请API授权](https://support.huaweicloud.com/usermanual-dataartsstudio/dataartsstudio_01_0334.html)操作。
- 如果API中入参定义了Static参数，则在API授权时应配置Static参数值，否则API工具调用时会导致缺少Static参数值的报错。
- 如需在本地调用专享版API，则需在创建专享版集群时绑定一个弹性公网IP，作为实例的公网入口。共享版API默认可通过公网访问。
- 通过demo.html手动生成的认证信息，有效期为15分钟，超时则失效。
- 调用数据服务API时，如果查询及返回数据的总时长超过默认60秒则会报超时错误。此时可通过访问日志中的API调用时长信息，根据超时阶段进一步优化API配置。
  ```
  ____________Duration information__________ 
  duration: 60491ms //总耗时
  url_duration: 0ms //URL匹配耗时
  auth_duration: 70ms //鉴权耗时
  before_sql_duration: 402ms //执行SQL预处理耗时
  sql_duration: 60001ms //SQL执行耗时
  after_sql_duration:18ms //执行SQL后处理耗时
  ```
  
 
 #### 获取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_0000002004233913.png "点击放大")
   
   
   
5. 获取待调用API的调用地址、请求方法和入参信息。 
   在左侧导航栏中进入API管理，找到待调用的API，然后单击API名称查看API的完整信息，保存调用地址、请求方法和入参信息。
   - 调用地址：专享版支持内网地址和外网地址（外网地址需要您在创建集群时绑定弹性IP），如果需要在本地调用专享版API，需要使用外网地址，确保网络互通。共享版使用APIG地址，可直接选择该地址进行调用。
   
   - 入参：本调用样例中创建了一个具备各类入参位置的API，以便为您介绍各类入参应如何在调用时输入。由于Static是不随API调用者的传值变化的静态参数，因此无需在调用时输入，不需要关注。
     图2保存调用地址、请求方法和入参信息   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001967596956.png "点击放大")
     
     
   
   
   
   
 
 #### 获取JavaScript SDK包
1. 在数据服务页面，单击左侧导航栏的"SDK"，然后下载JavaScript SDK。 
   图3下载JavaScript SDK   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002004241289.png "点击放大")
   
   
   
2. 进行SDK包完整性校验。Windows操作系统下，打开本地命令提示符框，输入如下命令，在本地生成已下载SDK包的SHA256值，其中，"D:\\javascript-sdk.zip"为SDK包的本地存放路径和SDK包名，请根据实际情况修改。 
   ```
   certutil -hashfile D:\javascript-sdk.zip SHA256
   ```
   命令执行结果示例，如下所示：
   ```
   SHA256 的 D:\javascript-sdk.zip 哈希:
   43da0b54d6b04d1f5ed7f278c2918c2a63a1ddb8048e2d1c5db60baafb17663c
   CertUtil: -hashfile 命令成功完成。
   ```
   对比所下载SDK包的SHA256值和命令示例中的SHA256值。如果一致，则表示下载过程不存在篡改和丢包。
   
   
 
 #### 生成认证信息
1. 解压SDK包，双击打开其中的"demo.html"文件，输入如下参数后，单击"Send request"查看返回值。 
   - Key、Secret：API授权应用的AppKey和AppSecret，可参考[获取APP和API信息]获取。
   
   - Method、Url：API的请求方法和调用地址，可参考[获取APP和API信息]获取。
     注意如果入参中包含Path和Query参数，则需要将调用地址中的**{path}** 变量修改为Path参数具体取值，Query参数取值以"?***Query*** ***参数名*** =***Query参数值***"的形式添加到调用地址的最后，如本例中为"?query=1"。
     
   
   - Headers：Headers参数无需填写，即使已定义Header参数，此处也要保持为空。
   
   - Body：使用大括号**{}** 将""***Body参数名*** ":***Body参数值***"形式的字符串包围在内，如本例中为"{"body":4}"。
   
   
   图4手动生成认证信息   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002088113226.png "点击放大")
   
   
2. 从返回值中分别保存X-Sdk-Date、Authorization和X-Authorization的内容，例如本例中需要复制如下内容：
   
   ```
   ...
   X-Sdk-Date: 202********55Z
   ...
   Authorization: SDK-HMAC-SHA256 Access=4e7********d6c, SignedHeaders=host;x-sdk-date, Signature=4bf2********4e2
   X-Authorization: SDK-HMAC-SHA256 Access=4e72********d6c, SignedHeaders=host;x-sdk-date, Signature=4bf2********4e2
   ...
   ```
   
   
 
 #### 调用API
1. 打开Postman工具，新增一个API请求。
2. API请求配置如下。 
   - 请求方法和调用地址：参考[获取APP和API信息]获取，与[生成认证信息]中的请求方法和调用地址保持一致。
     图5请求方法和调用地址   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002004245141.png "点击放大") 
   
   - Params：如果Query参数已经以"?***Query*** ***参数名*** =***Query参数值*** "的形式添加到调用地址的最后，则此处会自动生成Query Params的值，否则就需要手动输入。
     图6Params   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001967763260.png "点击放大")
     如果您需要对调用结果进行自定义调整，还可以配置如下Query参数：
     - （可选）分页配置：默认情况下，对于配置方式和默认分页的脚本/MyBatis方式API，系统将默认赋值返回量。如果需要获取特定分页数据，您可以修改如下参数设置分页，其中pageSize表示分页后的页面大小，pageNum表示页码。
       图7分页参数设置   
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001968203878.png "点击放大")
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
       自定义分页的脚本/MyBatis方式API是在创建API时将分页逻辑写到取数SQL中，因此不支持在调用时修改分页设置。
       
     
     - （可选）排序配置：默认情况下，系统会根据排序参数信息给出默认排序情况，自定义排序默认为升序。如果需要修改排序情况，您可以修改pre_order_by参数。其中排序参数描述pre_order_by的值填写形式为"***排序参数参数名*** :ASC"或"***排序参数参数名*** :DESC"，其中ASC表示升序，DESC表示降序，多个排序参数描述以"英文分号"进行分隔。
       图8排序参数设置   
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002004924341.png "点击放大")
       对于pre_order_by的值，您可以进行如下修改：
       - 删掉某可选的排序参数，则此排序参数不再参与排序。
       
       - 修改自定义排序方式的排序参数为升序或降序方式，则此排序参数按照修改后的排序方式排序。
        
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
       pre_order_by的值，不支持进行如下修改，否则会修改不生效或导致调用报错。
       - 删掉某必选的排序参数，则此排序参数依然会正常参与排序，删除不生效。
       
       - 调整排序参数的前后顺序，则排序依然以配置方式API配置排序参数时的排序参数顺序或脚本/MyBatis方式API SQL中的排序参数顺序为准，调整不生效。
       
       - 修改升序或降序的排序参数为其他排序方式，则会调用失败，不允许修改。
         
     
     - （可选）"返回总条数"配置：在创建API时，如果已打开"返回总条数"开关，则当API对应的数据表数据量较大时，获取数据总条数将会比较耗时。此时，如果需要在调用时不计算并返回数据总条数，可以修改use_total_num参数。use_total_num参数用于控制是否计算并返回数据总条数，值为1返回数据总条数，值非1不返回数据总条数。
       图9"返回总条数"参数配置   
       ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000001968786476.png "点击放大") 
       
   
   - Headers：将[2]中保存的X-Sdk-Date、Authorization和X-Authorization及其值依次填入，并将Header参数的参数名和参数值填入其中。
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
     默认情况下，Postman工具会自动勾选Host并从URI中生成Host值，无需手动填写。
     图10Headers   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002088274018.png "点击放大") 
   
   - Body：选择raw格式，使用大括号**{}** 将""***Body参数名*** ":***Body参数值*** "形式的字符串包围在内，如本例中为"{"body":4}"。
     图11Body   
     ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002004335489.png "点击放大") 
   
   
   
   
3. API请求配置完成后，单击"Send"发送请求到服务端，然后查看返回结果。返回**"errCode":"DLM.0"** 即表示API调用成功。如果失败，则请根据报错信息进行修复。
   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/public_sys-resources/note_3.0-zh-cn.png)
   如调用失败提示"Could not get any response"，可根据提示在Postman设置中关闭"SSL certificate verification"选项或关闭Proxy代理，然后再次尝试运行。
   图12调用API   
   ![](https://support.huaweicloud.com/usermanual-dataartsstudio/zh-cn_image_0000002004324277.png "点击放大")
   
   
 
