Dataphin-OpenAPI使用文档

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

前提条件

需购买OpenAPI功能。

权限说明

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

使用限制

支持Java(不低于JAVA 8版本)、Python(不低于Python 3.7版本)、TypeScript(Node.js不低于8.x版本)、Go(不低于1.10.x版本)、PHP(最低5.6版本)、.NET(最低net framework4.5或.Net Core 2.0版本)、C++(C++11及其更高版本)、Swift(5.6版本)等语言的SDK调用OpenAPI。

示例说明

本文示例代码以调用AddUserGroupMemberAPI为例,展示了如何调用API进行添加用户组成员请求,也为您详细介绍了升级版SDK的使用步骤。

如需调用其他OpenAPI,示例请参见OpenAPI门户

步骤一: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

通过JAVA调用OpenAPI(同步&异步)

获取OpenAPI SDK

在源码仓库获取SDK的依赖包,地址为:https://github.com/aliyun/alibabacloud-java-sdk/tree/master/dataphin-public-20230630

配置环境依赖及代码样例

环境依赖:

根据使用的工具使用不同的语句配置环境依赖。

// Apache Maven安装方式
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dataphin_public20230630</artifactId>
  <version>2.0.0</version>
</dependency>
// Gradle Groovy DSL安装方式
implementation 'com.aliyun:dataphin_public20230630:2.0.0'
// Gradle Kotlin DSL安装方式
implementation("com.aliyun:dataphin_public20230630:2.0.0")
// Scala SBT安装方式
libraryDependencies += "com.aliyun" % "dataphin_public20230630" % "2.0.0"
// Apache Ivy安装方式
<dependency org="com.aliyun" name="dataphin_public20230630" rev="2.0.0" />
// Groovy Grape安装方式
@Grapes(
  @Grab(group='com.aliyun', module='dataphin_public20230630', version='2.0.0')
)
// Leiningen安装方式
[com.aliyun/dataphin_public20230630 "2.0.0"]
// Apache Buildr安装方式
'com.aliyun:dataphin_public20230630:jar:2.0.0'

同步调用代码样例

Java同步调用SDK代码:

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用凭据初始化账号Client</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.dataphin_public20230630.Client createClient() throws Exception {
        // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // Endpoint 请参考 https://api.aliyun.com/product/dataphin-public
        config.endpoint = "dataphin-public.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.dataphin_public20230630.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        
        com.aliyun.dataphin_public20230630.Client client = Sample.createClient();
        com.aliyun.dataphin_public20230630.models.AddUserGroupMemberRequest addUserGroupMemberRequest = new com.aliyun.dataphin_public20230630.models.AddUserGroupMemberRequest()
                .setOpTenantId(1L);
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.addUserGroupMemberWithOptions(addUserGroupMemberRequest, new com.aliyun.teautil.models.RuntimeOptions());
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

同步调用操作步骤介绍:

  1. 初始化配置对象com.aliyun.teaopenapi.models.Config。 Config对象存放AccessKeyId、AccessKeySecret 、Endpoint等配置,EndpointSDK示例中的dataphin-public.cn-hangzhou.aliyuncs.com

    Config config = new Config()
        // 您的AccessKey ID
        .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
        // 您的AccessKey Secret
        .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    // 访问的域名
    config.endpoint = "dataphin-public.cn-hangzhou.aliyuncs.com";
  2. 实例化一个客户端,从com.aliyun.dataphin_public20230630.Client类生成对象client。 后续Request、Responsecom.aliyun.dataphin_public20230630.models中获得。

    Client client = new Client(config);
  3. 创建对应APIRequest。 类的命名规则为API方法名加上Request。例如:

    AddUserGroupMemberRequest request = new AddUserGroupMemberRequest();
  4. 设置请求类Request的参数。 通过Request类的属性设置必要的信息,即API中必须要提供的信息。

    request.RegionId = "your_value"; // 该参数值为假设值,请您根据实际情况进行填写request.OpTenantId = 1; // 该参数值为假设值,请您根据实际情况进行填写
  5. 通过client对象获得对应Request响应Response。

    AddUserGroupMemberResponse response = client.addUserGroupMember(request);
    System.out.println(new Gson().toJson(response.Body));
  6. 调用Response中对应的属性获得返回的参数值。 假设您需要获取RequestId。

    String requestId = response.Body.requestId;
  7. 使用catch()处理报错。

    catch (Exception e) {
        e.printStackTrace();
    }

异步调用代码样例

异步调用操作步骤和同步调用一致。Java异步调用SDK代码如下:

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.dataphin_public20230630.models.*;
import com.aliyun.sdk.service.dataphin_public20230630.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;

public class AddUserGroupMember {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/dataphin-public
                                .setEndpointOverride("dataphin-public.cn-hangzhou.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        AddUserGroupMemberRequest addUserGroupMemberRequest = AddUserGroupMemberRequest.builder()
                .regionId("your_value")
                .opTenantId(1L)
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<AddUserGroupMemberResponse> response = client.addUserGroupMember(addUserGroupMemberRequest);
        // Synchronously get the return value of the API request
        AddUserGroupMemberResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

通过Python调用OpenAPI

获取OpenAPI SDK

在源码仓库获取SDK的依赖包,地址为:https://github.com/aliyun/alibabacloud-java-sdk/tree/master/dataphin-public-20230630

配置环境依赖及代码样例

环境依赖:

安装Python二方包。

// PyPI PIP安装方式
pip install alibabacloud_dataphin_public20230630==2.0.1

Python SDK示例代码:

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_dataphin_public20230630.client import Client as dataphin_public20230630Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_dataphin_public20230630 import models as dataphin_public_20230630_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> dataphin_public20230630Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/dataphin-public
        config.endpoint = f'dataphin-public.cn-hangzhou.aliyuncs.com'
        return dataphin_public20230630Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        add_user_group_member_request = dataphin_public_20230630_models.AddUserGroupMemberRequest(
            op_tenant_id=1
        )
        try:
            # 复制代码运行请自行打印 API 的返回值
            client.add_user_group_member_with_options(add_user_group_member_request, util_models.RuntimeOptions())
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        add_user_group_member_request = dataphin_public_20230630_models.AddUserGroupMemberRequest(
            op_tenant_id=1
        )
        try:
            # 复制代码运行请自行打印 API 的返回值
            await client.add_user_group_member_with_options_async(add_user_group_member_request, util_models.RuntimeOptions())
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])

操作步骤介绍:

  1. 初始化配置对象alibabacloud_tea_openapi.ConfigConfig对象存放存放Access_key_id、Access_key_secretEndpoint等配置,Endpoint如示例中的dataphin-public.cn-hangzhou.aliyuncs.com

    import os
    from alibabacloud_tea_openapi import models as open_api_models
    
    config = open_api_models.Config(
        # 您的AccessKey ID,    access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
        # 您的AccessKey Secret,    access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    )
    # 访问的域名config.endpoint = 'dataphin-public.cn-hangzhou.aliyuncs.com'
  2. 实例化一个客户端,从alibabacloud_dataphin_public20230630.Client类生成对象client。后续Request、Responsealibabacloud_dataphin_public20230630.models中获得。

    from alibabacloud_dataphin_public20230630.client import Client as Client
    from alibabacloud_dataphin_public20230630 import models as models
    
    client = Client(config)
    
  3. 创建对应APIRequest。方法的命名规则为API名称加上Request。例如:

    request = models.AddUserGroupMemberRequest()
  4. 设置请求类Request的参数。 通过设置Request类的属性设置参数,即API中必须要提供的信息。例如:

    # 该参数值为假设值,请您根据实际情况进行填写request.region_id = "your_value";
    # 该参数值为假设值,请您根据实际情况进行填写request.op_tenant_id = 1;
  5. 通过client对象获得对应Request响应Response 。

    response = client.add_user_group_member(request)
    print(response)
  6. 调用Response中对应的属性获得返回的参数值。 假设您需要获取request_id:

    request_id = response.body.request_id
    print(request_id)
  7. 使用try...except... 处理报错。

    from Tea.exceptions import UnretryableException
    try:
        response = client.add_user_group_member(request)
    except UnretryableException as e:
        # 网络异常    print(e)
    except TeaException as e:
        # 业务异常    print(e)
    except Exception as e:
        # 其他异常    print(e)

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使用准备。