Dataphin-OpenAPI使用文档

Dataphin开放平台提供OpenAPI能力,通过调用DataphinOpenAPI使用Dataphin的各项功能,实现应用和Dataphin的集成和交互。

前提条件

需购买OpenAPI功能。

权限说明

建议使用超级管理员调用AccessKey、SecretKey,便于业务集成。

使用限制

支持Java SDK调用OpenAPI,Python及其他语言版本暂不支持。

步骤一:OpenAPI使用准备

  1. Dataphin页面,单击右上角的头像打开用户中心,单击个人账号

  2. 在左侧导航栏选择API访问 > AccessKey管理,进入AccessKey管理页面,获取调用地址、AccessKey、SecretKey等信息。

    • 调用地址服务器接入点信息(即域名),Dataphin 4.1版本之前未展示该信息,请联系运维部署团队获取。

    • AccessKey/SecretKey:在AccessKey列表区域,单击新建AccessKey按钮,获取AccessKey/SecretKey。

      请及时下载AccessKey文件,对话框关闭后将无法再次获取AccessKey Secret。

    • OpTenantId:即租户ID,可在Dataphin界面浏览器地址栏中获取。例如:https://dataphin.example.com/home/?tenantId=123456,其中tenantId的值即为OpTenantId,tenantId的值为123456,因为项目不会轻易变更,可以作为常量或配置项保存。

步骤二:使用OpenAPI SDK

获取OpenAPI SDK

AccessKey管理页面,单击下载OpenAPI SDK按钮,将文件下载至本地,解压后,可获取如图所示的文件内容。

image

压缩包内容

描述

aliyun-java-sdk-dataphin

OpenAPI SDK JAR包,可在Maven项目中引入,包含SDK1.0、SDK2.0接口输入输出定义。

aliyun-java-sdk-dataphin-core

OpenAPI SDK JAR包,可在Maven项目中引入。由于API演进和优化,Dataphin提供了不同的SDK版本,用于不同的API调用。

  • 包含SDK Client定义。

  • SDK1.0 Client:com.aliyuncs.dataphin.DataphinAcsClient

  • SDK2.0 Client:com.aliyuncs.DefaultAcsClient

  • SDK1.0SDK2.0区别:

    • SDK1.0支持Java开发接入。

    • SDK2.0支持Java、Python、Go等开发接入,详情请参见SDK安装

doc

Dataphin OpenAPI - SDK1.0接口文档:

  • Markdown文件格式,建议用Markdown工具打开。

  • Dataphin V4.5.0开始,不再新增新的OpenAPI接口。

doc-v2

Dataphin OpenAPI - SDK2.0接口文档:

  • PDF文件格式。

  • SDK1.0上的接口正在陆续迁移到2.0上。

example

OpenAPI开发接入参考示例。

使用SDK调用API接口

参考压缩包内容中的example工程,引入三个JAR包的Maven依赖:

aliyun-java-sdk-dataphin由压缩包提供。

aliyun-java-sdk-dataphin-core由压缩包提供。

aliyun-java-sdk-core可以在Maven公共仓库获取。

说明

DataphinOpenAPI SDK依赖阿里云OpenAPI三方库:aliyun-java-sdk-core,所以代码编译机器环境需连通公网,方便下载三方JAR包。

<dependencies>
  <dependency>
    <groupId>com.alibaba.dataphin</groupId>
    <artifactId>aliyun-java-sdk-dataphin</artifactId>
    <version>${具体版本根据获取到SDK.JAR的版本决定}</version>
    <systemPath>${JAR包路径}/aliyun-java-sdk-dataphin-{SDK版本}.JAR</systemPath>
  </dependency>
  <dependency>
    <groupId>com.alibaba.dataphin</groupId>
    <artifactId>aliyun-java-sdk-dataphin-core</artifactId>
    <version>${具体版本根据获取到JAR的版本决定}</version>
    <systemPath>${JAR包路径}/aliyun-java-sdk-dataphin-core-{SDK版本}.JAR</systemPath>
  </dependency>
  <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.3</version>
  </dependency>
</dependencies>

Idea编译器未找到相关JAR包,可手动添加,操作如下:

image

调用代码样例

package com.example.demo;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.dataphin.DataphinAcsClient;
import com.aliyuncs.dataphin.model.v20200830.security.ListUsersRequest;
import com.aliyuncs.dataphin.model.v20200830.security.ListUsersResponse;
import com.aliyuncs.dataphin_public.model.v20230630.ListAddableUsersRequest;
import com.aliyuncs.dataphin_public.model.v20230630.ListAddableUsersResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {

    private static final Logger log = LoggerFactory.getLogger(Main.class);

    /**
     * regionId: 可自定义,如dataphin
     */
    public static final String REGION_ID = "dataphin";

    /**
     * endpoint: Dataphin的OpenAPI服务地址,请联系运维部署同学获取
     */
    public static final String ENDPOINT = "dataphin-openapi.env16.aliyun.com";

    /**
     * accessKey: Dataphin的AK,在Dataphin右上角【个人信息-个人中心-AccessKey管理】中获取;代表当前个人的身份,所以建议使用超管账号调用;
     */
    public static final String ACCESS_KEY = "******";

    /**
     * secret: Dataphin的SK,获取方式同上
     */
    public static final String ACCESS_SECRET = "******";
    
    /**
     * 租户ID,Dataphin界面浏览器地址栏中获取
     * 例如:【https://dataphin.example.com/home/?tenantId=123456】,tenantId即为123456,因为项目不会轻易变更,可以作为常量或配置项保存
     */
    public static final Long TENANT_ID = 123456L;


    /**
     * 第二步:调用示例,根据租户ID获取用户列表
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // SDK v1.0调用示例
        testBySdkV1();
        //SDK v2.0调用示例
        testBySdkV2();
    }

    /**
     * SDK v1.0调用示例
     * SDK v1.0 所有的接口request都在目录 com.aliyuncs.dataphin.model.v20200830 下
     * @throws ClientException
     */
    private static void testBySdkV1() throws ClientException {
        ListUsersRequest request = new ListUsersRequest();
        ListUsersRequest.UserPagedQuery query = new ListUsersRequest.UserPagedQuery();
        request.setOpTenantId(TENANT_ID);
        query.setPage(1);
        query.setPageSize(20);
        request.setUserPagedQuery(query);
        try {
            ListUsersResponse response = getSdkV1Client().getAcsResponse(request);
            System.out.println(response.getData().getTotalCount());
        } catch (ClientException e) {
            log.error(e.getMessage(), e);
            System.out.println(e.getMessage());
            throw e;
        }
    }

    /**
     * SDK v2.0调用示例
     *  SDK v2.0 所有的接口request都在目录 com.aliyuncs.dataphin_public.model.v20230630 下
     * @throws ClientException
     */
    private static void testBySdkV2() throws ClientException {
        ListAddableUsersRequest request = new ListAddableUsersRequest();
        request.setOpTenantId(TENANT_ID);
        ListAddableUsersRequest.ListQuery listQuery = new ListAddableUsersRequest.ListQuery();
        listQuery.setPage(1);
        listQuery.setPageSize(20);
        request.setListQuery(listQuery);

        try {
            ListAddableUsersResponse response = getSdkV2Client().getAcsResponse(request);
            System.out.println(response.getPageResult().getTotalCount());
        } catch (ClientException e) {
            log.error(e.getMessage(), e);
            System.out.println(e.getMessage());
            throw e;
        }
    }

    /**
     * Dataphin OpenAPI - SDK2.0 客户端连接方式
     * @return
     */
    static DefaultAcsClient clientV2 = null;
    public static synchronized DefaultAcsClient getSdkV2Client() {
        if(clientV2!= null) {
            return clientV2;
        }
        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY, ACCESS_SECRET);
        DefaultProfile.addEndpoint(REGION_ID, "dataphin-public", ENDPOINT);
        profile.getHttpClientConfig().setIgnoreSSLCerts(true);
        clientV2 = new DefaultAcsClient(profile);
        return clientV2;
    }

    /**
     * Dataphin OpenAPI - SDK1.0 客户端连接方式
     * @return
     */
    static DataphinAcsClient  clientV1 = null;
    public static synchronized DataphinAcsClient getSdkV1Client() {
        if(clientV1 != null) {
            return clientV1;
        }
        DefaultProfile profile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY, ACCESS_SECRET);
        DefaultProfile.addEndpoint(REGION_ID, "dataphin", ENDPOINT);
        profile.getHttpClientConfig().setIgnoreSSLCerts(true);
        clientV1 =  new DataphinAcsClient(profile);
        return clientV1;
    }
}

OpenAPI常见问题

以下为API常见的通用错误,具体API的错误信息,您可以查看API文档,或咨询Dataphin技术支持。

OpenAPI报错

解决方法

Server unreachable:connectionhttp://dataphin-openapi.example.com

调用地址不正确,或者没有配置DNS解析,请确认域名是否正确或IP是否可正确解析。

输入命令curl -k http://dataphin-openapi.example.com/health确认调用地址的连通性,如果目标服务端正常,则返回:RUNNING

Invalid AccessKeyInvalid request signature

调用AccessKey/SecretKey不正确,或调用AccessKey已被禁用,请检查。

Missing required argument OpTenantId

缺少公共参数opTenantId,请参见OpenAPI使用准备。

User XXXXX is not in tenant XXXXXTenant XXXXX is not exist

公共参数opTenantId错误,请参见OpenAPI使用准备。