集成SDK
在调用OpenAPI时,建议采用在项目中集成SDK的方式。使用SDK可以简化开发流程,实现功能的快速集成,同时有效降低维护成本。本文将详细介绍如何在项目中安装SDK以及使用SDK开发。
环境要求
Node.js >= 8.x
安装SDK
V1.0 Node.js SDK仅支持泛化调用(CommonRequest)。该调用方式简化了API交互流程,只需集成@alicloud/pop-core
依赖即可实现。您可以通过以下命令安装SDK依赖:
npm install @alicloud/pop-core
使用SDK
V1.0 Node.js SDK在使用时,分为RPC风格调用和ROA风格调用两种方式。这两种方式在使用上存在一些细微的差异,本文将逐步为您详细说明。在示例中,RPC风格将以调用ECSDescribeInstances接口为例,ROA风格将以调用容器服务KubernetesDescribeClustersV1接口为例。
1. 初始化请求客户端
所有的OpenAPI均通过@alicloud/pop-core
提供的RPCClient或ROAClient发起调用,因此在调用OpenAPI之前,需要先进行客户端初始化。这里以使用AK初始化方式为例,更多客户端初始化方式请参见通过STS Token初始化客户端。
示例采用读取环境变量的方式获取凭证,运行代码前需配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID
和ALIBABA_CLOUD_ACCESS_KEY_SECRET
。具体操作,请参见在Linux、macOS和Windows系统配置环境变量。
RPC Client
// RPC Client初始化方式
const Core = require('@alicloud/pop-core');
var client = new Core({
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
// 域名,格式:http(s)://云产品endpoint,建议使用https。如ECS:http://ecs-cn-hangzhou.aliyuncs.com
endpoint: 'https://ecs.cn-hangzhou.aliyuncs.com',
// 云产品API版本,如ECS:2014-05-26
apiVersion: '2014-05-26'
});
ROA Client
// ROA Client初始化方式
var ROAClient = require('@alicloud/pop-core').ROAClient;
var client = new ROAClient({
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
// 域名,格式:http(s)://云产品endpoint,建议使用https。如ECS:http://cs.cn-chengdu.aliyuncs.com
endpoint: 'https://cs.cn-chengdu.aliyuncs.com',
// 云产品API版本,如ECS:2014-05-26
apiVersion: '2015-12-15'
});
2. 构造发起请求所需参数
发起请求时所需三个参数,分别为OpenAPI名称、请求参数对象、运行时参数对象。
不支持传本地文件,若存在上传本地文件的场景,请使用V2.0 SDK。
RPC调用参数
// OpenAPI名称
var action = 'DescribeInstances'
// 请求参数
var params = {
"RegionId": "cn-hangzhou",
"InstanceIds": "[\"i-bp67************\", \"i-7xva************\", … \"i-7xvc************\"]"
}
// 运行时参数
var requestOption = {
method: 'POST',
formatParams: false,
};
ROA调用参数
// 请求方式
const method = "GET"
// 路径参数
const uriPattern = '/api/v1/clusters';
// 查询参数
var queryParams = {
"cluster_type": "Kubernetes",
"name": "cluster-demo"
};
// 请求体,JSON格式字符串。例如:`{"nodepool_info":{"name":"nodepool-test","type":"ess"}}`;
const body = "";
// 自定义请求头
const headers = {
"Content-Type": "application/json"
};
// 运行时参数
const options = {
timeout: 3000, // default 3000 ms
};
3. 发起请求
通过步骤1创建的请求客户端调用request接口发起请求,该接口的参数为步骤2构造的参数。
RPC调用
// 发起请求
client.request(action, params, requestOption).then((result) => {
console.log(JSON.stringify(result));
}, (ex) => {
console.log(ex);
})
ROA调用
// 发起请求
roaClient.request(method, uriPattern, queryParams, body, headers, options)
.then((response) => {
console.log('ROA Response:', response);
})
.catch((error) => {
console.error('ROA Error:', error);
});
4. 异常处理
当接口返回结果的Code默认不为200
、OK
、Success
、success
中的任意一个时,则抛出异常。SDK支持自定义Code,可以灵活地控制程序在遇到异常时的处理方式。具体信息请参见异常处理。
相关文档
RPC和ROA介绍,请参见OpenAPI 风格。
关于SDK的高阶配置,例如代理配置、超时配置等,请参见进阶配置。
如何创建AK,请参见创建AccessKey。