在調用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風格將以調用Container ServiceKubernetesDescribeClustersV1介面為例。
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。