安装Node.js SDK

本文以调用 Function AI 的查询项目接口 GetProject 为例,介绍Node.js SDK的安装和使用。关于 GetProject 接口的 API 文档,请参见GetProject - 查询项目

前提条件

  • 创建AccessKey

    调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。

  • 在环境变量中配置AccessKey

    具体操作步骤,请参见Linux、macOSWindows系统配置环境变量

环境要求

Node.js >= 8.x

安装SDK

复制下方提供的安装命令在Terminal中执行,以完成Function AI SDK的安装:

npm install --save @alicloud/devs20230714

使用SDK

1.初始化客户端

SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据

'use strict';

const Devs20230714 = require('@alicloud/devs20230714');
const OpenApi = require('@alicloud/openapi-client');


class Client {

  static createClient() {
        let config = new OpenApi.Config({
            // 必填,请确保代码运行环境设置了环境变量 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'],
            endpoint: `devs.cn-hangzhou.aliyuncs.com`,
        });
        return new Devs20230714.default(config);
    }
}

2. 构建接口的请求对象

在调用OpenAPI进行参数传递时,需使用SDK提供的请求对象来实现参数的传递。在构建请求对象之前,请查看该接口的API文档GetProject - 查询项目获取参数信息。

说明

请求对象命名规则:{API名称}Request,例如GetProject接口的请求对象为GetProjectRequest。

// 构造请求对象
client.getProjectWithOptions('my-project', headers, runtime) 

3. 发起调用

通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置

说明

接口返回对象命名规则:{API名称}Response,例如GetProject该接口的返回对象为GetProjectResponse。

// 设置运行时参数
let runtime = new Util.RuntimeOptions({});
// 调用 GetProject 接口
await client.getProjectWithOptions('my-project', headers, runtime);

4. 异常处理

V2.0 Node.js SDK将异常进行了细致的分类,主要划分为UnretryableErrorResponseError。

  • UnretryableError:主要是由于网络问题导致在达到最大重试次数后抛出异常,可以通过err.data.lastRequest来查询错误发生时的请求信息。

  • ResponseError:主要以业务报错为主的异常。

更多关于异常处理的介绍,请参见异常处理

重要

建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。

5. 完整示例

'use strict';

const Devs20230714 = require('@alicloud/devs20230714');
const OpenApi = require('@alicloud/openapi-client');
const Util = require('@alicloud/tea-util');
const Tea = require('@alicloud/tea-typescript');

class Client {

  static createClient() {
        let config = new OpenApi.Config({
            // 必填,请确保代码运行环境设置了环境变量 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'],
            endpoint: `devs.cn-hangzhou.aliyuncs.com`,
        });
        return new Devs20230714.default(config);
    }

  static async main(args) {
    let client = Client.createClient();
    let runtime = new Util.RuntimeOptions({ });
    let headers = { };
    try {
      // 复制代码运行请自行打印 API 的返回值
      await client.getProjectWithOptions('my-project', headers, runtime);
    } catch (error) {
      // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
      // 错误 message
      console.log(error.message);
      // 诊断地址
      console.log(error.data["Recommend"]);
      Util.default.assertAsString(error.message);
    }    
  }

}

exports.Client = Client;
Client.main(process.argv.slice(2));

更多内容

除了使用上述调用方式外,您还可以使用泛化调用方式调用Function AIOpenAPI,详细介绍请参见泛化调用