那是什么Amazon SDK for JavaScript? - Amazon SDK for JavaScript
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon SDK for JavaScriptV3 API 参考指南详细描述了Amazon SDK for JavaScript版本 3 (V3) 的所有 API 操作。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

那是什么Amazon SDK for JavaScript?

欢迎阅读 Amazon SDK for JavaScript 开发人员指南。本指南提供有关设置和配置的一般信息Amazon SDK for JavaScript。它还会引导您浏览使用运行各种Amazon服务的示例和教程Amazon SDK for JavaScript。

Amazon SDK for JavaScriptv3 API 参考指南为Amazon服务提供了 JavaScript API。您可以使用 JavaScript API 构建适用于 Node.js 或浏览器的库或应用程序。


       JavaScript 环境、SDK 和Amazon Web Services 之间的关系

开发工具包主要版本的维护和支持

有关维护和支持 SDK 主要版本及其基础依赖关系的信息,请参阅 Amazon SDK 和工具参考指南中的以下内容:

版本 3 中的新增功能

适用于 JavaScript (V3) 的 SDK 版本 3 包含以下新功能。

模块化封装

用户现在可以为每项服务使用单独的软件包。

新的中间件堆栈

用户现在可以使用中间件堆栈来控制操作调用的生命周期。

此外,SDK 是用语言编写的 TypeScript,它有许多优点,例如静态输入。

重要

本指南中 V3 的代码示例是用 ECMAScript 6 (ES6) 编写的。ES6 带来了新的语法和新功能,使你的代码更现代、更具可读性,并做得更多。ES6 要求你使用 Node.js 版本 13.x 或更高版本。要下载并安装最新版本的 Node.js,请参阅 Node.js 下载。有关更多信息,请参阅JavaScript es6/CommonJS 语法

模块化封装

版本 2 的 SDK JavaScript (V2) 要求您使用整个Amazon SDK,如下所示。

var AWS = require("aws-sdk");

如果您的应用程序使用许多Amazon服务,则加载整个 SDK 不是问题。但是,如果您只需要使用少量Amazon服务,则意味着使用不需要或不使用的代码来增加应用程序的大小。

在 V3 中,您只能加载和使用所需的单个Amazon服务。如下例所示,它允许你访问Amazon DynamoDB (DynamoDB)。

import {DynamoDB} from "@aws-sdk/client-dynamodb";

您不仅可以加载和使用单个Amazon服务,还可以仅加载和使用所需的服务命令。如以下示例所示,它允许您访问 DynamoDB 客户端和ListTablesCommand命令。

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
重要

你不应该将子模块导入模块。例如,以下代码可以导致错误。

import {CognitoIdentity} from "@aws-sdk/client-cognito-identity/CognitoIdentity";

以下是正确的代码。

import {CognitoIdentity} from "@aws-sdk/client-cognito-identity";

比较代码大小

在版本 2 (V2) 中,列出该us-west-2区域所有 Amazon DynamoDB 表的简单代码示例可能如下所示。

var AWS = require("aws-sdk"); // Set the Region AWS.config.update({region: "us-west-2"}); // Create DynamoDB service object var ddb = new AWS.DynamoDB({apiVersion: "2006-03-01"}); // Call DynamoDB to retrieve the list of tables ddb.listTables({Limit:10}, function(err, data) { if (err) { console.log("Error", err.code); } else { console.log("Tables names are ", data.TableNames); } });

V3 看起来像以下内容。

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb"; (async function () { const dbclient = new DynamoDBClient({ region: 'us-west-2'}); try { const results = await dbclient.send(new ListTablesCommand); results.Tables.forEach(function (item, index) { console.log(item.Name); }); } catch (err) { console.error(err) } })();

aws-sdk软件包为您的应用程序增加了大约 40 MB。var AWS = require("aws-sdk")替换为import {DynamoDB} from "@aws-sdk/client-dynamodb"可将开销减少到大约 3 MB。将导入限制为 DynamoDB 客户端和ListTablesCommand命令可将开销减少到 100 KB 以下。

// Load the DynamoDB client and ListTablesCommand command for Node.js import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb"; const dbclient = new DynamoDBClient({});

在 V3 中调用命令

您可以使用 V2 或 V3 命令在 V3 中执行操作。要使用 V3 命令,您需要导入命令和所需的Amazon服务包客户端,然后使用 async/await 模式使用该.send方法运行该命令。

要使用 V2 命令,您需要导入所需的Amazon服务包,然后使用回调或 async/await 模式直接在软件包中运行 V2 命令。

使用 V3 命令

V3 为每个Amazon服务包提供了一组命令,使您能够对该Amazon服务执行操作。安装Amazon服务后,您可以浏览项目中的可用命令node-modules/@aws-sdk/client-PACKAGE_NAME/commands folder.

必须导入要使用的命令。例如,以下代码加载 DynamoDB 服务和CreateTableCommand命令。

import {DynamoDB, CreateTableCommand} from "@aws-sdk/client-dynamodb";

要在推荐的 async/at 模式中调用这些命令。

CLIENT.send(new XXXCommand)

例如,以下示例使用推荐的 async/await 模式创建 DynamoDB 表。

import {DynamoDB, CreateTableCommand} from "@aws-sdk/client-dynamodb"; const dynamodb = new DynamoDB({region: 'us-west-2'}); var tableParams = { Table : TABLE_NAME }; (async function () => { try{ const data = await dynamodb.send(new CreateTableCommand(tableParams)); console.log("Success", data); } catch (err) { console.log("Error", err); } })();
使用 V2 命令

要在 SDK 中使用 V2 命令 JavaScript,您需要导入完整的Amazon服务包,如以下代码所示。

const {DynamoDB} = require('@aws-sdk/client-dynamodb');

要以推荐的 async/await 模式调用 V2 命令,请使用以下语法。

client.command(parameters)

以下示例使用 V2createTable 命令使用推荐的 async/await 模式创建 DynamoDB 表。

const {DynamoDB} = require('@aws-sdk/client-dynamodb'); const dymamoDB = new DynamoDB({region: 'us-west-2'}); var tableParams = { TableName : TABLE_NAME }; async function run() => { try { const data = await dymamoDB.createTable(tableParams); console.log("Success", data); } catch (err) { console.log("Error", err); } }; run();

以下示例使用 V2createBucket 命令创建 Amazon S3 存储桶。

const {S3} = require('@aws-sdk/client-s3'); const s3 = new S3({region: 'us-west-2'}); var bucketParams = { Bucket : BUCKET_NAME }; function run(){ s3.createBucket(bucketParams, function(err, data) { if (err) { console.log("Error", err); } else { console.log("Success", data.Location); } }) };

新的中间件堆栈

SDK 的 V2 使您能够通过向请求附加事件侦听器来修改请求,从而在请求生命周期的多个阶段对其进行修改。这种方法可能使调试在请求的生命周期中出了什么问题变得困难。

在 V3 中,您可以使用新的中间件堆栈来控制操作调用的生命周期。这种方法有几个好处。在对请求对象进行任何更改后,堆栈中的每个中间件阶段都会调用下一个中间件阶段。这也使调试堆栈中的问题变得更加容易,因为您可以确切地看到导致错误的中间件阶段是调用了哪个阶段。

以下示例使用中间件向 Amazon DynamoDB 客户端(我们之前创建并展示过)添加自定义标头。第一个参数是一个接受的函数next,它是堆栈中下一个要调用的中间件阶段,而且context,它是一个包含有关所调用操作的一些信息的对象。该函数返回一个接受的函数args,该函数是一个包含传递给操作和请求的参数的对象。它返回调用下一个中间件的结果args

dbclient.middlewareStack.add( (next, context) => args => { args.request.headers["Custom-Header"] = "value"; return next(args); }, { step: "build" } ); dbclient.send(new PutObjectCommand(params));

将软件开发工具包与 Node.js 一起使用

Node.js 是用于运行服务器端 JavaScript 应用程序的跨平台运行时。您可以在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上设置 Node.js 以在服务器上运行。您还可以使用 Node.js 来编写按需 Amazon Lambda 函数。

使用适用于 Node.js 的 SDK 不同于你在 Web 浏览器 JavaScript 中使用它的方式。区别在于您加载 SDK 的方式以及获取访问特定 Web 服务所需的凭证的方式。当 Node.js 和浏览器对特定 API 的使用不同时,我们会指出这些差异。

将 SDK 与Amazon Cloud9

您也可以在Amazon Cloud9 IDE JavaScript 中使用 SDK 开发 Node.js 应用程序。有关与 SDKAmazon Cloud9 一起使用的更多信息 JavaScript,请参阅将 Amazon Cloud9 与 Amazon SDK for JavaScript 结合使用

将 SDK 与Amazon Amplify

对于基于浏览器的 Web、移动和混合应用程序,您也可以在上使用Amazon Amplify库 GitHub。它扩展了 SDK JavaScript,提供了一个声明式接口。

注意

诸如 Amplify 之类的框架可能无法提供与 SDK 相同的浏览器支持 JavaScript。有关详细信息,请参阅框架的文档。

在 Web 浏览器上使用 SDK

所有主流的 Web 浏览器都支持执行 JavaScript。 JavaScript 在 Web 浏览器中运行的代码通常称为客户端 JavaScript

有关支持的浏览器列表Amazon SDK for JavaScript,请参阅支持的 Web 浏览器

在 Web 浏览器 JavaScript 中使用 SDK 的方式与在 Node.js 中使用 SDK 的方式不同。区别在于您加载 SDK 的方式以及获取访问特定 Web 服务所需的凭证的方式。当 Node.js 和浏览器对特定 API 的使用不同时,我们会指出这些差异。

在 V3 中使用浏览器

V3 使您能够捆绑并在浏览器中仅包含所需 JavaScript 文件的 SDK,从而减少开销。

要在 HTML 页面 JavaScript 中使用 SDK 的 v3,必须使用 Webpack 将所需的客户端模块和所有必需的 JavaScript 函数捆绑到一个 JavaScript 文件中,并将其添加到 HTML 页面<head>的脚本标签中。例如:

<script src="./main.js"></script>
注意

有关 Webpack 的更多信息使用 webpack 捆绑应用程序

要 JavaScript 为您使用 SDK 的 V2,请改为添加指向 V2 SDK 最新版本的脚本标签。有关更多信息https://docs.amazonaws.cn/sdk-for-javascript/v2/developer-guide/getting-started-browser.html#getting-started-browser-run-sample,请参阅 SDK。 JavaScript

常见用例

JavaScript 在浏览器脚本中使用 SDK 可以实现许多引人注目的用例。以下是一些关于在浏览器应用程序中使用 SDK 来访问各种 Web 服务时可以构建的 JavaScript 东西的想法。

  • 为Amazon服务构建自定义控制台,您可以在其中访问和组合跨区域和服务的功能,以最好地满足您的组织或项目需求。

  • 使用 Amazon Cognito Identity 允许经过身份验证的用户访问您的浏览器应用程序和网站,包括使用 Facebook 和其他机构的第三方身份验证。

  • 使用 Amazon Kinesis 实时处理点击流或其他营销数据。

  • 使用 Amazon DynamoDB 实现无服务器数据持久化,例如网站访问者或应用程序用户的个人用户偏好。

  • 使用 Amazon Lambda 封装专有逻辑,您可以从浏览器脚本调用逻辑而无需下载和向用户泄露您的知识产权。

关于示例

您可以浏览 SDK,查看Amazon代码 JavaScript 示例存储库中的示例。

资源

除了本指南外,还有以下适用于 JavaScript 开发人员的 SDK 在线资源: