AWS Amplify
AWS Amplify 是面向前端和移动开发人员构建支持云的应用程序的 JavaScript 库。
AWS Amplify提供跨不同类别云操作的声明性且易于使用的界面。 AWS Amplify适用于任何基于JavaScript的前端工作流程,以及适用于移动开发人员的React Native。
我们的默认实施适用于Amazon Web Services(AWS),但AWS Amplify旨在为任何自定义后端或服务开放和插拔。
注意:
Amplify@3.x.x 有突破性的变化。请看下面的突破性变化:
AWS.credentials
和AWS.config
不再存在于Amplify JS的任何地方。- 这两个选项在第3版中将无法使用。您将无法使用和设置自己的凭证。关于 "如何迁移到使用Amplify提供的凭证" 的迁移计划将在GA推出后的未来几周内跟进。
如果你不能迁移到 aws-sdk-js-v3 或依赖 aws-sdk@2.x, ,你将需要单独导入它。
-
如果您在Amplify JS应用程序中使用导出的路径,(例如:
import from "@aws-amplify/analytics/lib/Analytics"
),现在这将打破,不再支持。你将需要改用命名导入。:import { Analytics } from 'aws-amplify';
-
如果您使用类别作为
Amplify.<Category>
,这将不再工作,我们建议导入您需要使用的类别:import { Auth } from 'aws-amplify';
- 唯一的例外是使用
aws-amplify-angular
包,我们仍然提供所有实例化的category。这在以后的版本中可能会发生变化。
- 唯一的例外是使用
- 对于
aws-amplify-react
的Authenticator
组件,你需要在你的应用程序中导入样式:import `@aws-amplify/ui/dist/style.css`;
特性 / APIs
- 身份验证 :面向想要创建的开发人员的API和构建块用户认证体验。
- Analytics :轻松收集应用的分析数据。 Google Analytics 数据包括您要在应用中跟踪的用户会话和其他自定义事件。
- API :提出HTTP请求时提供简单的解决方案。它提供符合AWS Signature Version 4的自动轻量级签名过程。
- GraphQL客户端 :互动使用您的GraphQL服务器或AWS AppSync API,易于使用和使用配置GraphQL客户端。
- 存储 :提供一种简单的机制来管理您的用户内容应用程序在公共,受保护或私人存储桶中。
- 推送通知 :允许您在应用中集成推送通知使用Amazon Pinpoint定位和广告系列管理支持。
- 互动 :使用深度学习技术创建对话机器人。
- PubSub :提供与基于云的面向消息的中间件的连接。
- 国际化 :轻量级国际化解决方案。
- 缓存 :为JavaScript开发人员提供通用LRU缓存以存储具有优先级和到期设置的数据。
访问我们的网站,了解有关AWS Amplify的更多信息。
安装
AWS Amplify可在 npm 上以 aws-amplify
包的形式提供
$ npm install aws-amplify --save
或者您可以单独安装要使用的模块:
$ npm install @aws-amplify/auth --saveReact
如果您正在开发 React 应用,则可以安装其他软件包 aws-amplify-react
包含高阶组件:
$ npm install aws-amplify --save $ npm install aws-amplify-react --saveAngular
如果您正在开发 Angular 应用,则可以安装其他软件包 aws-amplify-angular
。此软件包包含 Angular模块,其中包含提供商和组件:
$ npm install aws-amplify --save $ npm install aws-amplify-angular --save
访问我们的Web安装指南,开始构建您的网络应用。
Vue如果您正在开发 Vue 应用,则可以安装其他软件包 aws-amplify-vue
。此软件包包含Amplify库的 Vue插件以及Vue 组件:
$ npm install aws-amplify --save $ npm install aws-amplify-vue --save
访问我们的网络安装指南,开始构建您的Vue应用。
React Native对于React Native开发,请安装 aws-amplify
$ npm install aws-amplify --save
如果您正在开发 React Native 应用,则可以安装其他软件包 aws-amplify-react -native
包含高阶组件:
$ npm install aws-amplify-react-native --save
访问我们的 React Native安装指南,开始构建您的Web应用。
配置
在您的应用中的某个位置,最好是在根级别,使用您的资源配置Amplify。
使用AWS资源import Amplify from 'aws-amplify'; import aws_exports from './aws-exports'; Amplify.configure(aws_exports); // 或者您不想安装所有类别 import Amplify from '@aws-amplify/core'; import Auth from '@aws-amplify/auth'; import aws_exports from './aws-exports'; // 以这种方式,您只导入Auth并进行配置。 Amplify.configure(aws_exports);没有AWS
Amplify.configure({ API: { graphql_endpoint: 'https://www.example.com/my-graphql-endpoint', }, });
例子
AWS Amplify支持许多类别方案,例如开发人员指南。下面是几个样本:
1.收集用户会话指标
默认情况下,AWS Amplify可以使用几行代码收集用户会话跟踪数据:
import Analytics from '@aws-amplify/analytics'; Analytics.record('myCustomEvent');
有关详细信息,请参阅我们的 Analytics开发人员指南。
2.将身份验证添加到您的应用
添加用户注册并使用 Auth class 可用的众多方法中的两种方法登录:
import Auth from '@aws-amplify/auth'; Auth.signUp({ username: 'AmandaB', password: 'MyCoolPassword1!', attributes: { email: 'someemail@example.com', }, }); Auth.signIn(username, password) .then(success => console.log('successful sign in')) .catch(err => console.log(err));有关详细信息,请参阅我们的身份验证开发人员指南。 React / React Native 向React或React Native应用程序添加身份验证就像使用我们的
withAuthenticator
更高阶组件包装应用程序的主要组件一样简单。 AWS Amplify将为用户注册和登录等常见用例提供可自定义的UI。
//对于React import { withAuthenticator } from 'aws-amplify-react'; // 对于 React Native import { withAuthenticator } from 'aws-amplify-react-native'; export default withAuthenticator(App);Angular 要向Angular应用添加身份验证,您还可以使用内置服务提供商和组件:
// app.component.ts import { AmplifyService } from 'aws-amplify-angular'; ... constructor( public amplify:AmplifyService ) { // handle auth state changes this.amplify.authStateChange$ .subscribe(authState => { this.authenticated = authState.state === 'signedIn'; if (!authState.user) { this.user = null; } else { this.user = authState.user; } }); } // app.component.html <amplify-authenticator></amplify-authenticator>
有关Angular设置和使用的更多详细信息,请参阅我们的 Angular Guide 。
3.签署HTTP请求
当使用API模块时,AWS Amplify使用 AWS签名版本4 自动签署您的REST请求:
import API from '@aws-amplify/api'; let apiName = 'MyApiName'; let path = '/path'; let options = { headers: {...} // OPTIONAL } API.get(apiName, path, options).then(response => { // Add your code here });
有关详细信息,请参阅我们的 API开发人员指南。
4.GraphQL API操作
要使用您的应用访问GraphQL API,您需要确保在应用配置中配置端点URL。
// configure a custom GraphQL endpoint Amplify.configure({ API: { graphql_endpoint: 'https://www.example.com/my-graphql-endpoint', }, }); // Or configure an AWS AppSync endpoint. let myAppConfig = { // ... aws_appsync_graphqlEndpoint: 'https://xxxxxx.appsync-api.us-east-1.amazonaws.com/graphql', aws_appsync_region: 'us-east-1', aws_appsync_authenticationType: 'API_KEY', aws_appsync_apiKey: 'da2-xxxxxxxxxxxxxxxxxxxxxxxxxx', // ... }; Amplify.configure(myAppConfig);查询
import API, { graphqlOperation } from '@aws-amplify/api'; const ListEvents = `query ListEvents { listEvents { items { id where description } } }`; const allEvents = await API.graphql(graphqlOperation(ListEvents));突变
import API, { graphqlOperation } from '@aws-amplify/api'; const CreateEvent = `mutation CreateEvent($name: String!, $when: String!, $where: String!, $description: String!) { createEvent(name: $name, when: $when, where: $where, description: $description) { id name where when description } }`; const eventDetails = { name: 'Party tonight!', when: '8:00pm', where: 'Ballroom', description: 'Coming together as a team!', }; const newEvent = await API.graphql(graphqlOperation(CreateEvent, eventDetails));订阅
import API, { graphqlOperation } from '@aws-amplify/api'; const SubscribeToEventComments = `subscription subscribeToComments { subscribeToComments { commentId content } }`; const subscription = API.graphql( graphqlOperation(SubscribeToEventComments) ).subscribe({ next: eventData => console.log(eventData), });
有关详细信息,请参阅我们的 GraphQL API开发人员指南。
5.上传和下载公共或私人内容
AWS Amplify提供了一个易于使用的API,用于存储和从公共或私人存储文件夹中获取内容:
Storage.put(key, fileObj, { level: 'private' }) .then(result => console.log(result)) .catch(err => console.log(err)); // Store data with specifying its MIME type Storage.put(key, fileObj, { level: 'private', contentType: 'text/plain', }) .then(result => console.log(result)) .catch(err => console.log(err));
有关详细信息,请参阅我们的存储开发人员指南。