更新时间:2024-10-22 GMT+08:00

(推荐)通过SDK调用APP认证方式的API

APP认证方式的API接口可以分别绑定不同的应用,安全级别最高。而APP认证方式的API使用SDK调用方式,支持Java、Go、Python、JavaScript、C#、PHP、C++、C、Android等多种语言,可帮助您简单、快速地通过数据API获取到开放数据。

本章以Java SDK为例,为您介绍如何使用SDK调用APP认证方式的API,主要包含如下几步:
  1. 获取APP和API信息:准备APP和API关键信息,用于API调用。
  2. 获取SDK包:下载SDK包并进行完整性校验。
  3. 通过SDK调用API:修改SDK代码并运行。

前提条件

  • 已完成APP认证方式的API或API工作流的发布,在服务目录中可以查看已发布的API。
  • 已完成创建应用并将API授权给应用,即API开发者已完成通过应用授权APP认证方式API,或API调用者已完成申请API授权
  • 本章以Java SDK为例,因此需要已安装Eclipse 3.6.0或以上版本,如果未安装,请至Eclipse官方网站下载。

约束与限制

  • APP认证方式的API调用前必须先完成通过应用授权APP认证方式API申请API授权操作。
  • 如需在本地调用专享版API,则需在创建专享版集群时绑定一个弹性公网IP,作为实例的公网入口。
  • 调用数据服务API时,如果查询及返回数据的总时长超过默认60秒则会报超时错误。此时可通过访问日志中的API调用时长信息,根据超时阶段进一步优化API配置。
    ____________Duration information__________ 
    duration: 60491ms //总耗时
    url_duration: 0ms //URL匹配耗时
    auth_duration: 70ms //鉴权耗时
    befor_sql_duration: 402ms //执行SQL预处理耗时
    sql_duration: 60001ms //SQL执行耗时
    after_sql_duration:18ms //执行SQL后处理耗时

获取APP和API信息

  1. 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。
  2. DataArts Studio控制台首页,选择对应工作空间的“数据服务”模块,进入数据服务页面。
  3. 在左侧导航栏选择服务版本(例如:专享版),进入总览页。
  4. 获取API授权应用的AppKey和AppSecret(如已授权多个APP,获取其中一个APP信息即可)。

    在左侧导航栏中进入应用管理,找到API授权的应用,并单击应用名称查看APP的完整信息,保存AppKey和AppSecret。

    图1 保存AppKey和AppSecret信息

  5. 获取待调用API的调用地址、请求方法和入参信息。

    在左侧导航栏中进入API管理,找到待调用的API,并单击API名称查看API的完整信息,保存调用地址、请求方法和入参信息。

    • 调用地址:专享版支持内网地址和外网地址(外网地址需要您在创建集群时绑定弹性IP),如果需要在本地调用专享版API,需要使用外网地址,确保网络互通。
    • 入参:本调用样例中创建了一个具备各类入参位置的API,以便为您介绍各类入参应如何在调用时输入。由于Static是不随API调用者的传值变化的静态参数,因此无需在调用时输入,不需要关注。
      图2 保存调用地址、请求方法和入参信息

获取SDK包

  1. 在数据服务页面,单击左侧导航栏的SDK,然后下载Java SDK。

    图3 下载SDK

  2. 进行SDK包完整性校验。Windows操作系统下,打开本地命令提示符框,输入如下命令,在本地生成已下载SDK包的SHA256值,其中,“D:\java-sdk.zip”为SDK包的本地存放路径和SDK包名,请根据实际情况修改。

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

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

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

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

    表1 SDK包及对应的SHA256值

    不同语言SDK包

    SHA256值

    Java

    77e033cfb4ea3a8bfdc773d44b9db0ce886eee16fa97bbac536a3174f9d4e029

    Go

    f448645da65b4f765d9569fc97ca45dc3e8f1ce4f79d70c5c43934318521d767

    Python

    54b4984d91db641d2b1b0e77064c162850cb2511a587f95e2f8b8340e7afa128

    C#

    970782e67540efbbf4fc2ccb5e96ca3b1a2f352233a4bbc52b9210b2382831f7

    JavaScript

    43da0b54d6b04d1f5ed7f278c2918c2a63a1ddb8048e2d1c5db60baafb17663c

    PHP

    394c068420a3817f32d5d88b6c1632978f573f2a685e4a1d10c2f698e0f6786e

    C++

    abae5473d47594f88dcd5eaa0902dc12cd6f1e3bd63c0b82d9d1fab8b4351f54

    C

    a376573fe8aa3a636a6d123926ddc3dca11748b289b8c2c16a5056830a095acb

    Android

    c19175d736f05b1945dab4675df19311834ede0d9b1978b11b50c86687baf85c

通过SDK调用API

  1. 解压1中获取的Java SDK包,并在Eclipse中导入SDK工程。
  2. 导入成功后,打开main.java文件,修改如下图红框所示的内容:

    图4 修改main.java
    • 如下参数设置API的请求方法和调用地址,可参考5进行获取。
      注意如果入参中包含Path参数,则需要将调用地址中的{path}变量修改为具体取值,如下代码中将其取值为3。
      1
      2
      request.setMethod("POST");
      request.setUrl("https://xx.xx.xx.xx/getPupilInfo/3");
      
    • 如下参数分别设置Query、Header和Body参数的取值。
      注意Body参数需要使用双引号和大括号"{}"将“"Body参数名":Body参数值”形式的字符串包围在内,且其内字符串中的双引号""需要使用\进行转义。
      1
      2
      3
      request.addQueryStringParam("query", "1");
      request.addHeader("header", "2");
      request.setBody("{\"body\":4}");
      
    • (可选)默认情况下,对于配置方式和默认分页的脚本/MyBatis方式API,系统将默认赋值返回量。如果想获取特定分页数据,可以修改如下参数设置分页,其中pageSize表示分页后的页面大小,pageNum表示页码。
      1
      2
      request.addQueryStringParam("page_size", "100");
      request.addQueryStringParam("page_num", "1"); 
      

      自定义分页的脚本/MyBatis方式API是在创建API时将分页逻辑写到取数SQL中,因此不支持在调用时修改分页设置。

    • (可选)默认情况下,系统会根据排序参数信息给出默认排序情况,自定义排序默认为升序。如果需要修改排序情况,可以修改如下参数设置。其中排序参数描述pre_order_by的值填写形式为“排序参数参数名:ASC”或“排序参数参数名:DESC”,其中ASC表示升序,DESC表示降序,多个排序参数描述以“英文分号”进行分隔。
      1
      request.addQueryStringParam("pre_order_by", "id:ASC;age:ASC;score:DESC");
      
      对于pre_order_by的值,您可以进行如下修改:
      • 删掉某可选的排序参数,则此排序参数不再参与排序。
      • 修改自定义排序方式的排序参数为升序或降序方式,则此排序参数按照修改后的排序方式排序。
      pre_order_by的值,不支持进行如下修改,否则会修改不生效或导致调用报错。
      • 删掉某必选的排序参数,则此排序参数依然会正常参与排序,删除不生效。
      • 调整排序参数的前后顺序,则排序依然以配置方式API配置排序参数时的排序参数顺序或脚本/MyBatis方式API SQL中的排序参数顺序为准,调整不生效。
      • 修改升序或降序的排序参数为其他排序方式,则会调用失败,不允许修改。
    • (可选)在创建API时,如果已打开“返回总条数”开关,则当API对应的数据表数据量较大时,获取数据总条数将会比较耗时。此时,如果需要在调用时不计算并返回数据总条数,可以修改如下参数设置。其中的use_total_num参数用于控制是否计算并返回数据总条数,值为1返回数据总条数,值非1不返回数据总条数。
      1
      request.addQueryStringParam("use_total_num", "0");
      

  3. 配置AppKey和AppSecret。由于认证用的AppKey和AppSecret编码到代码中或者明文存储都有很大的安全风险,因此建议在配置文件或者环境变量中存放,确保安全,本示例从环境变量中获取。

    在Eclipse中,单击菜单栏的“Run > Run Configurations”,在弹窗中选择“Environment”,分别新增变量名SDK_AK和SDK_SK,值分别对应4中获取的AppKey和AppSecret。新增完成后,单击“Apply”后再单击“Run”,运行程序。

    图5 配置AppKey和AppSecret

  4. 运行程序后,查看API调用结果。200消息中的"errCode":"DLM.0"即表示API调用成功。如果失败,则请根据报错信息进行修复。

    图6 运行程序