全部产品
Search
文档中心

大数据开发治理平台 DataWorks:调用API

更新时间:Aug 19, 2026

API 发布至 API 网关后,调用方需持有经授权的应用(App)凭据才能访问。本文介绍从 API 发布到成功调用的完整准备:创建应用、建立授权、认证方式、获取凭据及通过 SDK 发起调用。

调用前提:三要素缺一不可

在调用任何数据服务 API 之前,您需要确保以下三个条件全部满足:

前提条件

说明

负责角色

API 已发布

API 必须已通过审批并成功发布至 API 网关,生成在线调用地址。详情请参见发布API。

API 开发者

应用(App)已创建

调用者需要在 API 网关中拥有一个应用,作为调用 API 时的身份标识。

API 调用者

授权关系已建立

应用(App)必须获得目标 API 的调用授权,否则即使持有正确凭据也会被拒绝访问。详情请参见API 网关授权。

API 开发者/管理员

三者的关系可以理解为:API 是“门”,App 是“身份证”,授权是“通行证”。只有同时出示合法的身份证和对应的通行证,才能通过这扇门。

创建应用(App 身份)

应用(App)是您调用 API 时的身份凭证载体。每个 App 拥有一组独立的认证信息(AppKey、AppSecret、AppCode),相当于该身份的“账号和密码”。

自动创建的默认应用

当您在 DataWorks 中首次发布 API 时,系统会自动在 API 网关中创建一个与工作空间同名的应用(App),并将该工作空间下的所有 API 自动授权给这个默认应用。这意味着:

  • 同一工作空间内的成员,可以直接使用默认 App 的凭据调用本空间下的 API,无需额外授权。

  • 默认应用的认证信息可在数据服务控制台的API 调用页面查看。

手动创建应用

如果需要对不同的调用方进行流量隔离或权限区分,您可以在 API 网关控制台中手动创建新的应用:

  1. 登录API 网关控制台。

  2. 在左侧导航栏,选择应用管理。

  3. 单击创建应用,输入应用名称和描述。

  4. 创建成功后,系统会为该应用生成一组 AppKey、AppSecret 和 AppCode。

说明

为不同的调用场景(如内部系统、第三方合作伙伴、数据看板等)分别创建独立的 App,便于后续进行流量监控、限流控制和权限管理。

授权流程

授权是指将某个 API 的调用权限授予指定的应用(App)。只有建立了授权关系的 App,才能使用其凭据成功调用对应的 API。

授权给其他账号

当您需要将 API 开放给其他阿里云账号下的工作空间调用时,需要进行跨账号授权:

  1. 登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据分析与服务 > 数据服务,在下拉框中选择对应工作空间后单击进入数据服务。

  2. 进入数据服务页面,单击顶部菜单栏的服务管理,进入API 管理页面。

  3. 在发布的 API页签下,找到目标 API,单击其后的授权。

  4. 在API 授权对话框中,配置以下参数:

    API授权

    参数

    说明

    API 名称

    待授权的 API 名称,默认不可修改。

    要授权的云账号 ID

    需要获得该 API 调用权限的阿里云账号 ID。您可以在页面查看账号 ID。

    要授权的工作空间

    选择目标阿里云账号下的工作空间名称。

    授权有效期

    选择授权的有效期限(详见下文)。

  5. 单击确认,完成授权。

授权有效期

授权有效期决定了被授权方可以调用 API 的时间范围:

有效期类型

说明

适用场景

短期

需要选择一个截止日期,在该日期前有权调用 API。到期后授权自动失效。

临时性数据共享、限时合作项目、试用场景。

长期

永久有权调用 API,除非手动撤销授权。

长期稳定的系统集成、内部服务间调用。

说明

如果已授权的 API 被下线或删除,被授权方将无法继续调用该 API。如果已授权的 API 被下线后重新发布(或修改后重新发布),需要 API 负责人对新版本重新授权。

查看已授权与被授权的 API

在API 管理页面,您可以从两个维度查看授权状态:

查看获得授权的 API(我被授权了哪些 API)

单击获得授权的 API页签,查看所有其他账号授权给您的 API 列表。在此页面您可以:

  • 单击测试,在线测试获得授权的 API。详情请参见测试API。

  • 单击删除,主动放弃某个 API 的调用授权。

查看授权给他人的 API(我授权了哪些 API 给别人)

单击授权给他人的 API页签,查看您授权给其他工作空间的 API 列表。在此页面您可以:

  • 单击测试,在线测试已授权的 API。

  • 单击授权管理,取消或修改对特定工作空间的授权。

三种授权场景

根据团队规模和安全管理需求的不同,API 授权的粒度也有所差异。以下三种场景覆盖了最常见的授权方案。

场景一:同一工作空间,共用一个 App

场景一

场景描述:同一个 DataWorks 工作空间下的所有成员,共同使用工作空间默认创建的同一个应用(App)来调用 API。

适用情况:团队规模较小、成员之间信任度高;不需要区分不同成员的调用流量来源;快速启动,最简配置。

工作方式:DataWorks 在 API 发布时自动创建与工作空间同名的 App,并自动将工作空间内的所有 API 授权给该 App。工作空间内的所有成员共享这组 AppKey、AppSecret 和 AppCode。

优势:零配置,开箱即用。劣势:无法区分具体是哪个成员发起的调用;如果某个成员的凭据泄露,影响范围为整个工作空间。

场景二:每个 RAM 用户使用独立的 App

场景二

场景描述:企业内的每个 RAM 用户(子账号),各自在 API 网关中创建独立的应用(App),分别获得 API 的调用授权。

适用情况:需要精确追踪每个用户的 API 调用行为;需要对不同用户设置不同的限流策略;安全合规要求较高,需要做到“一人一凭据”。

工作方式:每个 RAM 用户登录 API 网关控制台各自创建自己的 App;API 管理员将 API 分别授权给每个用户的 App;每个用户使用自己 App 的凭据调用 API。

优势:调用行为可追溯到个人,安全隔离性强,凭据泄露影响范围最小。劣势:管理开销较大,每新增一个用户都需要创建 App 和配置授权。

场景三:多个 RAM 用户分组,每组共用一个 App

场景三

场景描述:将多个 RAM 用户按业务职能或团队划分为若干组,每组成员共同使用同一个应用(App)来调用 API。

适用情况:团队规模较大,按部门或项目组划分;需要区分不同业务线的调用流量,但不需要精确到个人;在管理成本与安全性之间取得平衡。

工作方式:按业务组创建对应数量的 App;API 管理员将 API 授权给各业务组的 App;组内成员共享本组 App 的凭据。

优势:管理粒度适中,既能区分业务来源又不会产生过多管理开销。劣势:组内成员之间无法进一步区分。

场景选型建议

维度

场景一(共用 App)

场景二(独立 App)

场景三(分组 App)

管理复杂度

低

高

中

安全隔离度

低

高

中

流量追踪粒度

工作空间级

用户级

业务组级

凭据泄露影响

整个工作空间

仅限个人

仅限业务组

推荐团队规模

5 人以下

不限

10 人以上

三类凭据辨析:避免混淆

数据服务涉及三类完全不同的认证凭据,用途、来源和使用场景完全不同,请务必区分:

凭据类型

用途

来源

使用场景

API 调用凭据(AppKey/AppSecret/AppCode)

调用方调用已发布的 API 时证明身份

API 网关 > 应用管理

客户端代码中调用数据服务 API

数据源连接凭据(AccessKey ID/AccessKey Secret)

数据服务连接后端数据源时的身份认证

阿里云 RAM > AccessKey 管理

数据源配置页面填写,用于数据服务连接您的数据库

DataWorks 平台权限(RAM 用户/角色)

控制谁能在 DataWorks 控制台中操作 API

阿里云 RAM > 用户/角色管理

登录 DataWorks、创建/发布/管理 API

一句话记忆:AccessKey 管“连数据源”,AppKey 管“调 API”,RAM 管“进控制台”。三者各司其职,互不替代。

混淆一:“API 调用报 403,但我有 RAM 管理员权限” — RAM 权限控制的是 DataWorks 控制台操作权限,而不是 API 调用权限。API 调用权限由 App 授权控制。即使您是 RAM 管理员,调用 API 时仍然需要一个已被授权的 App 的 AppKey/AppSecret。

混淆二:“数据源配置的 AccessKey 和 API 调用的 AppKey 是同一个吗?” — 不是。AccessKey 用于数据服务后台连接数据源;AppKey 用于调用方调用 API。两者完全独立。

混淆三:授权页面的“云账号 ID”填什么? — 授权页面要求填写的是阿里云账号 ID(纯数字),而非 RAM 用户名或登录邮箱。获取方式:登录账号管理页面,在安全设置中查看账号 ID。

认证方式对比

API 网关支持两种身份认证方式。数据服务默认会为工作空间下的 API 添加“阿里云 APP 认证”,调用方可以根据安全需求选择具体的认证方式。

简单认证(AppCode)

调用者仅需在 HTTP 请求的 Header 中添加 AppCode 即可完成身份认证,无需进行签名计算。

请求示例:

GET /api/v1/users?name=test HTTP/1.1
Host: your-api-endpoint.cn-shanghai.alicloudapi.com
Authorization: APPCODE 3f963a8e1cd7492bbd8a5e2e5e4c****

签名认证(AppKey + AppSecret)

调用者需要使用 AppSecret 对请求内容进行 HMAC-SHA256 签名计算,将 AppKey 和签名值添加到请求 Header 中。API 网关收到请求后使用相同的 AppSecret 重新计算签名,对比签名是否一致来验证调用者身份。

请求示例(Header 部分):

X-Ca-Key: 12345678
X-Ca-Signature: BASE64_ENCODED_SIGNATURE
X-Ca-Timestamp: 1741593600000
X-Ca-Nonce: unique-uuid-string
X-Ca-Signature-Headers: X-Ca-Key,X-Ca-Nonce,X-Ca-Timestamp

两种方式对比

对比项

简单认证(AppCode)

签名认证(AppKey + AppSecret)

安全级别

较低

高

实现复杂度

极低(仅一行 Header)

中等(需实现签名算法)

防重放攻击

不支持

支持(基于时间戳和 Nonce)

防篡改

不支持

支持(请求内容参与签名)

适用场景

内部系统调试、数据看板、快速原型验证

生产环境、对外开放 API、安全合规要求高的场景

传输要求

强烈建议配合 HTTPS 使用

即使 HTTP 也有一定安全性,但仍建议使用 HTTPS

说明

选型建议:

  • 开发测试阶段:使用 AppCode 方式快速验证 API 功能,降低开发成本。

  • 生产环境:务必使用 AppKey + AppSecret 签名认证,并配合 HTTPS 传输加密。

  • 对外开放 API:必须使用签名认证,防止凭据在传输过程中被截获后遭到重放攻击。

签名算法详解

签名认证基于 HMAC-SHA256 算法,核心流程如下:

签名流程概览

  1. 构造规范化请求字符串(StringToSign):将 HTTP 方法(GET/POST)、Accept Header、Content-MD5(请求 Body 的 MD5 值)、Content-Type、Date、参与签名的自定义 Header(X-Ca-*,按字母序排列)以及规范化 URL(路径 + 排序后的查询参数)依次拼接。

  2. 使用 HMAC-SHA256 计算签名:Signature = Base64(HMAC-SHA256(AppSecret, StringToSign))

  3. 将签名信息添加至请求 Header:包括 X-Ca-Key(AppKey)、X-Ca-Signature(签名值)、X-Ca-Timestamp(毫秒级时间戳)、X-Ca-Nonce(UUID,防重放)和 X-Ca-Signature-Headers(参与签名的 Header 列表)。

关键注意事项

在实现签名算法时,以下细节容易出错:

  • 参数排序:URL 查询参数和签名 Header 必须按 Key 的字母序(ASCII 码序)排列。

  • URL 编码:参数值中的特殊字符(空格、中文等)需要进行 URL 编码。

  • 换行符:StringToSign 中各行之间使用 \n(LF)分隔,不能使用 \r\n(CRLF)。

  • 空值处理:无 Body 时 Content-MD5 为空字符串(不是 null),Accept 等 Header 不存在时也用空字符串。

  • 时间戳精度:X-Ca-Timestamp 为毫秒级时间戳,客户端与服务器时间偏差不能超过 15 分钟。

  • Nonce 唯一性:每次请求必须生成唯一的 UUID 作为 X-Ca-Nonce,重复使用会触发重放攻击拦截。

说明

包括 Java 和 Python 的完整代码示例、StringToSign 的详细拼接规则以及常见签名错误的调试方法,请参见 API 网关文档中的签名算法章节。

查看认证凭据

在成功创建应用并获得授权后,您需要获取 AppKey、AppSecret 或 AppCode 来进行 API 调用。数据服务提供了便捷的凭据查看入口。

通过数据服务控制台查看

  1. 登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据分析与服务 > 数据服务,在下拉框中选择对应工作空间后单击进入数据服务。

  2. 在数据服务页面,单击页面顶部菜单栏的服务管理。

  3. 在左侧导航栏,单击API 调用。

  4. 在API 调用页面,您可以查看和复制以下认证信息:AppKey(应用唯一标识)、AppSecret(用于签名认证,请妥善保管)、AppCode(用于简单认证)。

通过 API 网关控制台查看:登录 API 网关控制台,在应用管理中找到目标应用,进入详情页查看 AppKey、AppSecret 和 AppCode。

重要

AppSecret 和 AppCode 是敏感信息,请勿在代码仓库、日志、前端页面等公开位置暴露。如怀疑凭据泄露,请立即在 API 网关控制台中重置 AppSecret。

通过 API 网关 SDK 调用

API 网关提供了主流编程语言的 SDK,帮助您快速集成 API 调用。SDK 已内置签名算法的实现,您无需手动计算签名,只需提供 AppKey 和 AppSecret 即可。详情请参见调用 API 文档和SDK 下载与使用。

支持的 SDK 语言

语言

SDK 说明

Java

支持 Maven 依赖引入,提供同步和异步调用方式。

Python

支持 pip 安装,兼容 Python 2.7 和 3.x。

Node.js

支持 npm 安装。

PHP

支持 Composer 安装。

C#

支持 NuGet 包管理。

Go

支持 go get 安装。

使用 SDK 的优势

相比手动构造 HTTP 请求,使用 SDK 调用有以下优势:

  • 自动签名:SDK 内部实现了 HMAC-SHA256 签名算法,开发者无需关心签名细节。

  • 自动重试:部分 SDK 内置了网络异常重试机制。

  • 参数校验:SDK 会在发送请求前进行基本的参数合法性校验。

  • 性能优化:SDK 通常使用连接池和 HTTP/2 等技术优化网络性能。

快速集成示例(Java)

以下示例展示如何使用 API 网关 Java SDK 调用数据服务 API:

// 1. 添加 Maven 依赖
// <dependency>
//     <groupId>com.aliyun.api.gateway</groupId>
//     <artifactId>sdk-core-java</artifactId>
//     <version>最新版本</version>
// </dependency>

// 2. 初始化客户端
HttpClientBuilderParams params = new HttpClientBuilderParams();
params.setAppKey("your_app_key");
params.setAppSecret("your_app_secret");

ApacheHttpClient client = new ApacheHttpClient(params);

// 3. 构造请求
IoTApiRequest request = new IoTApiRequest();
request.setDomain("your-api-endpoint.cn-shanghai.alicloudapi.com");
request.setPath("/api/v1/query");
request.setHttpMethod("GET");
request.putQueryParam("pageSize", "10");
request.putQueryParam("pageNum", "1");

// 4. 发起调用
ApiResponse response = client.execute(request);
System.out.println("Response: " + response.getBody());

快速集成示例(Python)

# 1. 安装 SDK
# pip install aliyun-api-gateway-sdk

# 2. 调用 API
from com.alibaba.cloudapi.sdk.client import DefaultClient
from com.alibaba.cloudapi.sdk.model import HttpClientBuilderParams

params = HttpClientBuilderParams()
params.app_key = "your_app_key"
params.app_secret = "your_app_secret"
params.host = "your-api-endpoint.cn-shanghai.alicloudapi.com"

client = DefaultClient(params)
response = client.get(
    path="/api/v1/query",
    query_params={"pageSize": "10", "pageNum": "1"},
    headers={"Accept": "application/json"}
)

print(f"Status: {response.status_code}")
print(f"Body: {response.content}")
说明

各语言 SDK 的详细使用说明、API 参考和示例代码,请参见 API 网关官方文档中的SDK 下载与使用章节。

完整调用流程总结

从 API 发布到成功调用的完整流程:API 开发者开发并测试 API、发布 API 至 API 网关(自动创建默认 App 和授权);如需跨账号共享则手动授权给目标账号。API 调用者创建 App(或使用默认 App)、获取认证凭据(AppKey/AppSecret/AppCode)、选择认证方式(简单认证使用 AppCode,签名认证使用 AppKey+AppSecret),最后通过 SDK 或 HTTP 调用 API。API 网关验证身份后,数据服务执行查询并返回结果。