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