集成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提供的RPCClientROAClient发起调用,因此在调用OpenAPI之前,需要先进行客户端初始化。这里以使用AK初始化方式为例,更多客户端初始化方式请参见通过STS Token初始化客户端

说明

示例采用读取环境变量的方式获取凭证,运行代码前需配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具体操作,请参见Linux、macOSWindows系统配置环境变量

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默认不为200OKSuccesssuccess中的任意一个时,则抛出异常。SDK支持自定义Code,可以灵活地控制程序在遇到异常时的处理方式。具体信息请参见异常处理

完整示例代码

RPC调用

// RPC Client初始化方式
const Core = require('@alicloud/pop-core');

var client = new Core({
  // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
  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'
});

// OpenAPI名称
var action = 'DescribeInstances'

// 请求参数
var params = {
  "RegionId": "cn-hangzhou",
  "InstanceIds": "[\"i-bp67acfmxazb4p****\", \"i-bp67acfmxazb4p****\", … \"i-bp67acfmxazb4p****\"]"
}

// 运行时参数
var requestOption = {
  method: 'POST',
  formatParams: false,
};

// 发起请求
client.request(action, params, requestOption).then((result) => {
  console.log(JSON.stringify(result));
}, (ex) => {
  console.log(ex);
})

ROA调用

const ROAClient = require('@alicloud/pop-core').ROAClient;

// 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'
});

// 请求方式
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
};

// 发起请求
roaClient.request(method, uriPattern, queryParams, body, headers, options)
  .then((response) => {
    console.log('ROA Response:', response);
  })
  .catch((error) => {
    console.error('ROA Error:', error);
  });

相关文档