aws-amplify-js後端即服務(BaaS)架構詳解

AWS Amplify是一個面向前端和移動開發者的JavaScript庫,用於構建雲支持的應用程序。它提供了跨不同雲操作類別的聲明式和易於使用的接口,非常適合任何基於JavaScript的前端工作流和React Native移動開發者。默認實現適用於亞馬遜網絡服務(AWS),但AWS Amplify設計為開放且可插拔,可用於任何自定義後端或服務。

核心功能與服務類別

AWS Amplify提供了豐富的功能,涵蓋了應用開發中常見的各種雲操作需求。以下是主要的功能類別及其對應的AWS服務:

類別

AWS 提供商

描述

Authentication

Amazon Cognito

創建身份驗證體驗的API和構建塊。

Analytics

Amazon Pinpoint

收集應用程序的分析數據,包括跟蹤用户會話。

REST API

Amazon API Gateway

用於API Gateway和其他REST端點的Sigv4簽名和AWS身份驗證。

GraphQL API

AWS AppSync

與您的GraphQL或AWS AppSync端點交互。

DataStore

AWS AppSync

用於共享和分佈式數據的編程模型,具有簡單的在線/離線同步。

Storage

Amazon S3

管理公共、受保護、私有存儲桶中的內容。

Geo (Developer preview)

Amazon Location Service

為基於JavaScript的Web應用程序提供地圖和位置搜索的API和UI組件。

Push Notifications

Amazon Pinpoint

允許您在應用程序中集成推送通知,並支持Amazon Pinpoint定位和消息管理。

Interactions

Amazon Lex

創建由深度學習技術支持的對話機器人。

PubSub

AWS IoT

提供與基於雲的面向消息的中間件的連接。

Internationalization

---

輕量級國際化解決方案。

Cache

---

為JavaScript開發人員提供通用LRU緩存,用於存儲具有優先級和過期設置的數據。

Predictions

Various*

將您的應用程序與機器學習服務(如NLP、計算機視覺、TTS等)連接。

*Predictions利用一系列亞馬遜的機器學習服務,包括:Amazon Comprehend、Amazon Polly、Amazon Rekognition、Amazon Textract和Amazon Translate。

架構設計與核心組件

AWS Amplify的架構設計遵循模塊化原則,將不同的功能組織到各個包中,以便開發者可以根據需要選擇性地導入和使用。主要的核心組件包括:

認證模塊

認證模塊位於packages/auth/目錄下,提供了與Amazon Cognito集成的功能,用於用户註冊、登錄、身份驗證等操作。該模塊包含了豐富的測試用例,如Signer.test.ts用於測試簽名功能,確保身份驗證的安全性。

存儲模塊

存儲模塊位於packages/storage/目錄,提供了與Amazon S3集成的功能,用於文件的上傳、下載、列出等操作。其中,Storage.list方法允許開發者列出存儲桶中的文件,在 Amplify 5.x.x 版本中,maxKeys參數已更名為pageSize,並具有包含結果列表的新返回類型。

數據分析模塊

數據分析模塊位於packages/analytics/目錄,提供了與Amazon Pinpoint集成的功能,用於收集應用程序的分析數據。該模塊包含了如record.test.ts等測試用例,確保數據分析功能的準確性。

數據存儲模塊

DataStore是AWS Amplify的一個重要功能,位於packages/datastore/目錄。它提供了一個用於共享和分佈式數據的編程模型,具有簡單的在線/離線同步功能。有關DataStore的更多信息,可參考DataStore Docs。

版本遷移與兼容性

AWS Amplify不斷更新迭代,不同版本之間可能存在一些破壞性變更,開發者在升級時需要注意:

Amplify 6.x.x 遷移

Amplify 6.x.x 存在破壞性變更,升級指南請參考遷移指南。

Amplify 5.x.x 遷移

Amplify 5.x.x 有以下破壞性變更:

  1. 命名導出變更:如果您從任何Amplify包中使用默認導出,則需要遷移到使用命名導出。例如:
- import Amplify from 'aws-amplify';
+ import { Amplify } from 'aws-amplify'

- import Analytics from '@aws-amplify/analytics';
+ import { Analytics } from '@aws-amplify/analytics';
// or better
+ import { Analytics } from 'aws-amplify';

- import Storage from '@aws-amplify/storage';
+ import { Storage } from '@aws-amplify/storage';
// or better
+ import { Storage } from 'aws-amplify';
  1. DataStore 謂詞語法變更:影響DataStore.queryDataStore.saveDataStore.deleteDataStore.observe接口。例如:
- await DataStore.delete(Post, (post) => post.status('eq', PostStatus.INACTIVE));
+ await DataStore.delete(Post, (post) => post.status.eq(PostStatus.INACTIVE));

- await DataStore.query(Post, p => p.and( p => [p.title('eq', 'Amplify Getting Started Guide'), p.score('gt', 8)]));
+ await DataStore.query(Post, p => p.and( p => [p.title.eq('Amplify Getting Started Guide'), p.score.gt(8)]));

要在5.x.x中使用新語法,您可能需要使用最新版本的Amplify代碼生成重新構建DataStore模型:

  • 升級Amplify CLI:npm install -g @aws-amplify/cli
  • 使用Amplify代碼生成重新生成模型:amplify codegen models
  1. Storage.list 變更:maxKeys參數已更名為pageSize,並具有包含結果列表的新返回類型。例如:
- const photos = await Storage.list('photos/', { maxKeys: 100 });
- const { key } = photos[0];

+ const photos = await Storage.list('photos/', { pageSize: 100 });
+ const { key } = photos.results[0];

Amplify 4.x.x 遷移

Amplify 4.x.x 對React Native有破壞性變更,使用React Native(vanilla或Expo)的開發者需要添加以下React Native社區依賴:

// React Native
yarn add aws-amplify amazon-cognito-identity-js @react-native-community/netinfo @react-native-async-storage/async-storage
npx pod-install

// Expo
yarn add aws-amplify @react-native-community/netinfo @react-native-async-storage/async-storage

快速開始

AWS Amplify在npm上以aws-amplify名稱提供。要開始使用,請從快速開始主頁選擇您的平台。

通過以上對aws-amplify-js後端即服務(BaaS)架構的詳細解析,開發者可以更好地理解和使用AWS Amplify構建雲支持的應用程序,充分利用其豐富的功能和靈活的架構設計。