DataStoreからの移行
DataStoreについて
AWS Amplify DataStoreは、アプリとクラウド間のデータを自動的に同期するローカルファースト(ローカル優先)のデータレイヤーを提供していました。DataStoreを使用していた場合、同期ロジックを自分で記述することなく、いくつかの強力な機能を得ることができました。セッション間でデータを永続化するローカルデータベース、AppSyncバックエンドとの自動双方向同期、バージョン追跡を使用した組み込みの競合解決、ミューテーション キューとリプレイを備えた完全なオフラインサポート、observe()およびobserveQuery()による リアルタイム更新です。
DataStoreはGraphQL操作、ネットワーク状態管理、データの一貫性の複雑さを抽象化していました。ローカルモデルの単純なsave、query、deleteメソッドで作業でき、残りはすべてDataStoreが裏で処理していました。
このガイドでは、DataStoreからAmplify APIカテゴリへの移行方法を示します。これはクエリ、ミューテーション、サブスクリプションに使用されます。DataStoreの機能セットのうち、アプリが実際に使用している量によっては、移行が予想より簡単な場合があります。
フロントエンドクライアントがDataStoreから移行された後、バックエンドで競合解決を無効化して、同期インフラストラクチャを削除し、ミューテーションを簡素化(_version追跡なし)し、ソフト削除からハード削除に切り替えます。
このガイドについて
このガイドでは、DataStoreからAmplify APIカテゴリへの移行パスについて説明します。DataStore操作をAPI相当物で置き換え、オプションでローカルキャッシングとオフラインファーストサポートをサードパーティFlutterパッケージを使用して追加します。
クイック比較:前後
一般的なDataStore操作がAmplify APIカテゴリにどのように変換されるかについての概要を以下に示します。
| DataStore操作 | Amplify API相当 |
|---|---|
Amplify.DataStore.save()(作成) | Amplify.API.mutate(request: ModelMutations.create(...)) |
Amplify.DataStore.save()(更新) | Amplify.API.mutate(request: ModelMutations.update(...)) |
Amplify.DataStore.delete() | Amplify.API.mutate(request: ModelMutations.delete(...)) |
Amplify.DataStore.query()(シングル) | Amplify.API.query(request: ModelQueries.get(...)) |
Amplify.DataStore.query()(リスト) | Amplify.API.query(request: ModelQueries.list(...)) |
Amplify.DataStore.observe() | Amplify.API.subscribe(ModelSubscriptions.onCreate/onUpdate/onDelete(...)) |
Amplify.DataStore.observeQuery() | 最初のModelQueries.list()+3つのサブスクリプション(直接相当物なし) |
Amplify.DataStore.clear() | 不要になりました(クリアすべきローカルDataStoreなし) |
Amplify.DataStore.start() / stop() | 不要になりました |
ユースケース
すべての顧客がDataStoreの機能セット全体を必要とするわけではありません。特定のユースケースに応じて、移行は簡潔な場合があります。
- APIの使いやすさ: DataStoreを使用する主な理由がGraphQLクエリまたはAPIの管理を簡素化することであり、アプリケーションがオフラインまたはローカルキャッシング機能を必要としない場合、Amplify APIカテゴリへの移行を検討してください。これにより、既存のAmplifyリソースを使用しながら、簡潔なデータ管理インターフェイスで作業を続けることができます。
- ローカルキャッシング: DataStoreを主にローカルキャッシングレイヤーとして使用し、デバイスにデータを一時的に保存しているが、オフラインファースト機能には大きく依存していない場合、サードパーティFlutterパッケージを使用して、より簡潔なローカルキャッシング ソリューションへの移行を検討してください。
- オフラインファースト: ビジネス要件が完全なオフラインファースト機能をサポートすることに依存している場合、オフラインファーストガイドが新しいオフラインファースト ソリューションへの移行のためのハイレベルアプローチを提供します。
このガイドを使用する方法
ページを順番に従ってください。各ステップは前のステップに基づいています。
-
DataStoreを削除。 プロジェクトからDataStore依存関係を削除し、モデルを使用するようにAPIプラグインを設定してください。
-
Amplify APIに移行。 すべてのDataStore操作をAPI相当物で置き換えてください。
save、query、delete、observe、observeQueryを移行してください。 -
オプション:ローカルキャッシング。 サードパーティFlutterパッケージを使用してオフラインデータアクセス用のローカルキャッシュをセットアップしてください。
-
オフラインファースト。 リモート同期、ライブ同期、ネットワーク検出、オフラインミューテーションで完全なオフラインサポートを構築してください。
-
認可とデータ処理。 認証ルールを管理し、移行中に既存の顧客データを処理してください。
-
競合解決を無効化。 すべてのフロントエンドクライアントがDataStoreから移行されたら、同期インフラストラクチャを削除し、ミューテーションを簡素化し、ソフト削除からハード削除に切り替えてください。
-
役立つリソース。 追加のドキュメンテーション、サードパーティパッケージ、参考資料です。
移行チェックリスト
移行を計画・追跡するにはこのチェックリストを使用してください:
pubspec.yamlを更新 —amplify_datastore依存関係を削除してください(DataStoreを削除を参照)- Amplify設定を更新 — DataStoreプラグインを削除し、APIプラグインに
ModelProviderを渡してください - CRUD操作を移行 —
DataStore.save()、DataStore.query()、DataStore.delete()をAPI相当物で置き換えてください(Amplify APIに移行を参照) - リアルタイムリスナーを移行 —
DataStore.observe()およびDataStore.observeQuery()をAPIサブスクリプションで置き換えてください - API応答の違いを処理 —
GraphQLResponse型とトークンベースのページネーションに適応してください - テスト — すべてのCRUD操作、リアルタイムサブスクリプション、エラーハンドリングを検証してください
- 競合解決を無効化 — すべてのクライアントが移行されたら(競合解決を無効化を参照)