こんにちは!
最近は AppSync によるバッチ処理の開発が多くなってきました。市場にだんだんと AppSync(というより GraphQL )が広まってきているのを感じます、本当に嬉しいですね。
今時のリーンスタートアップなプロジェクトには、GraphQL の作り替えのしやすさが大変相性が良いので、AppSync と GraphQL がどんどん広がっていけばいいなと考えています。
本記事では、AppSyncSDK をバックエンドリソース上からの使用する際に指定する謎パラメーター「 disableOffline 」「 fetchPolicy 」について触れていきたいと思います。
Lambda へ適切な IAM ロールを設定し、AppSyncSDK の認証モードをクレデンシャルに指定しましょう。
const client = new AWSAppSyncClient({
...
auth: {
type: type,
credentials: credentials,
}
...
});
AppSyncSDK の仕様を調べると、Apollo のドキュメントにたどり着くことが多いと思います。それは、AppSyncSDK は Apollo クライアントを拡張したライブラリーだからです。
実は Apollo でも、AWS AppSync と通信することが可能ですが auth に Cognito を指定できないなどということが発生しますので、基本的には AppSyncSDK を利用しましょう。( AWS AppSync でわざわざ Apollo を使用するメリットはないように感じます)
fetchPolicy: 'network-only'
と disableOffline: true
パラメータを付与しない場合、SDK はオフライン機能を有効にします。
反対に、付与することでオフライン機能を無効化することができます。
付与するケース | ブラウザ以外で AppSyncSDK を用いている場合など |
付与しないケース | ブラウザで AppSyncSDK を用いており、かつ、オフライン機能を利用したい場合 |
つまり、Lambda などで AppSyncSDK を実行する場合は付与しません!
代表的な機能として、オフライン状態からオンライン状態へ復帰した際に接続を自動的に行う再試行機能です。
オフライン機能では、一部ローカルストレージと通信し処理を行う必要があるため、もしも Lambda などでオフライン機能を有効にした場合、 Not Found LocalStorage
エラーが発生する可能性があります。
そのため、AppSyncSDK 利用時には、fetchPolicy: 'network-only
‘ と disableOffline: true
を付与しオフライン機能を無効にしておきましょう。
APIからデータを取得する際にキャッシュを使用するかどうかを選択できます。
network-only | 常に GraphAPI から最新のデータを取得します。 |
cache-first | ネットワークリクエストを送信する前に cache を参照、cache が存在しなければネットワークからデータのフェッチを行います。 |
cache-and-network | キャッシュデーターとサーバーのデータの一貫性を保つように最適化します。cache-first と挙動は似ていますが、違いとしてはキャッシュが存在してもネットワークリクエストを実行しキャッシュを更新することがあります。 |
cache-only | 常にキャッシュからデータを取得します。キャッシュが存在しない場合は throw されます。 |
AppSyncSDK は、Apollo を拡張しているので非常にオプションが多く高機能です。Apollo 開発の経験者はすんなり扱えるのではないでしょうか?
AppSync と GraphQL を広めるために、今後も AppSyncSDK に関する情報を発信していきます。
AppSync に関する開発はお問い合わせください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎