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 有以下破壞性變更:
- 命名導出變更:如果您從任何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';
- DataStore 謂詞語法變更:影響
DataStore.query、DataStore.save、DataStore.delete和DataStore.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
- 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構建雲支持的應用程序,充分利用其豐富的功能和靈活的架構設計。