(推荐)通过SDK调用APP认证方式的API
APP认证方式的API接口可以分别绑定不同的应用,安全级别最高。而APP认证方式的API使用SDK调用方式,支持Java、Go、Python、JavaScript、C#、PHP、C++、C、Android等多种语言,可帮助您简单、快速地通过数据API获取到开放数据。
- 获取APP和API信息:准备APP和API关键信息,用于API调用。
- 获取SDK包:下载SDK包并进行完整性校验。
- 通过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信息
- 参考访问DataArts Studio实例控制台,登录DataArts Studio管理控制台。
- 在DataArts Studio控制台首页,选择对应工作空间的“数据服务”模块,进入数据服务页面。
- 在左侧导航栏选择服务版本(例如:专享版),进入总览页。
- 获取API授权应用的AppKey和AppSecret(如已授权多个APP,获取其中一个APP信息即可)。
在左侧导航栏中进入应用管理,找到API授权的应用,并单击应用名称查看APP的完整信息,保存AppKey和AppSecret。
图1 保存AppKey和AppSecret信息
- 获取待调用API的调用地址、请求方法和入参信息。
在左侧导航栏中进入API管理,找到待调用的API,并单击API名称查看API的完整信息,保存调用地址、请求方法和入参信息。
- 调用地址:专享版支持内网地址和外网地址(外网地址需要您在创建集群时绑定弹性IP),如果需要在本地调用专享版API,需要使用外网地址,确保网络互通。
- 入参:本调用样例中创建了一个具备各类入参位置的API,以便为您介绍各类入参应如何在调用时输入。由于Static是不随API调用者的传值变化的静态参数,因此无需在调用时输入,不需要关注。
图2 保存调用地址、请求方法和入参信息
获取SDK包
- 在数据服务页面,单击左侧导航栏的
,然后下载Java SDK。图3 下载SDK
- 进行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中获取的Java SDK包,并在Eclipse中导入SDK工程。
- 导入成功后,打开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参数的取值。
- (可选)默认情况下,对于配置方式和默认分页的脚本/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");
- 如下参数设置API的请求方法和调用地址,可参考5进行获取。
- 配置AppKey和AppSecret。由于认证用的AppKey和AppSecret编码到代码中或者明文存储都有很大的安全风险,因此建议在配置文件或者环境变量中存放,确保安全,本示例从环境变量中获取。
在Eclipse中,单击菜单栏的“Run > Run Configurations”,在弹窗中选择“Environment”,分别新增变量名SDK_AK和SDK_SK,值分别对应4中获取的AppKey和AppSecret。新增完成后,单击“Apply”后再单击“Run”,运行程序。
图5 配置AppKey和AppSecret
- 运行程序后,查看API调用结果。200消息中的"errCode":"DLM.0"即表示API调用成功。如果失败,则请根据报错信息进行修复。
图6 运行程序