Dataphin开放平台提供OpenAPI能力,通过调用Dataphin的OpenAPI使用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。
示例说明
本文示例代码以调用AddUserGroupMember的API为例,展示了如何调用API进行添加用户组成员请求,也为您详细介绍了升级版SDK的使用步骤。
如需调用其他OpenAPI,示例请参见OpenAPI门户。
步骤一:OpenAPI使用准备
在Dataphin页面,单击右上角的头像打开用户中心,单击个人账号。
在左侧导航栏选择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);
}
}
}
同步调用操作步骤介绍:
初始化配置对象
com.aliyun.teaopenapi.models.Config。 Config对象存放AccessKeyId、AccessKeySecret 、Endpoint等配置,Endpoint如SDK示例中的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";实例化一个客户端,从
com.aliyun.dataphin_public20230630.Client类生成对象client。 后续Request、Response从com.aliyun.dataphin_public20230630.models中获得。Client client = new Client(config);创建对应API的Request。 类的命名规则为API方法名加上Request。例如:
AddUserGroupMemberRequest request = new AddUserGroupMemberRequest();设置请求类Request的参数。 通过Request类的属性设置必要的信息,即API中必须要提供的信息。
request.RegionId = "your_value"; // 该参数值为假设值,请您根据实际情况进行填写request.OpTenantId = 1; // 该参数值为假设值,请您根据实际情况进行填写通过
client对象获得对应Request响应Response。AddUserGroupMemberResponse response = client.addUserGroupMember(request); System.out.println(new Gson().toJson(response.Body));调用Response中对应的属性获得返回的参数值。 假设您需要获取RequestId。
String requestId = response.Body.requestId;使用
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.1Python 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:])
操作步骤介绍:
初始化配置对象
alibabacloud_tea_openapi.Config。Config对象存放存放Access_key_id、Access_key_secret和Endpoint等配置,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'实例化一个客户端,从
alibabacloud_dataphin_public20230630.Client类生成对象client。后续Request、Response从alibabacloud_dataphin_public20230630.models中获得。from alibabacloud_dataphin_public20230630.client import Client as Client from alibabacloud_dataphin_public20230630 import models as models client = Client(config)创建对应API的Request。方法的命名规则为API名称加上Request。例如:
request = models.AddUserGroupMemberRequest()设置请求类Request的参数。 通过设置Request类的属性设置参数,即API中必须要提供的信息。例如:
# 该参数值为假设值,请您根据实际情况进行填写request.region_id = "your_value"; # 该参数值为假设值,请您根据实际情况进行填写request.op_tenant_id = 1;通过
client对象获得对应Request响应Response 。response = client.add_user_group_member(request) print(response)调用Response中对应的属性获得返回的参数值。 假设您需要获取request_id:
request_id = response.body.request_id print(request_id)使用
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报错 | 解决方法 |
| 调用地址不正确,或者没有配置DNS解析,请确认域名是否正确或IP是否可正确解析。 输入命令 |
| 调用AccessKey/SecretKey不正确,或调用AccessKey已被禁用,请检查。 |
| 缺少公共参数opTenantId,请参见OpenAPI使用准备。 |
| 公共参数opTenantId错误,请参见OpenAPI使用准备。 |