AppSyncClient の hydrated() とは?AppSync 開発者 が解説します😎

AppSyncClient の hydrated() とは?AppSync 開発者 が解説します😎

こんにちは!

AWSAppSyncClient は、Apollo クライアントを拡張した AppSync 向けのGraphQL クライアントです。

AppSync 向けと表現しましたが、正確にはCognito や IAM と認証/認可連携できるなど、AWS 環境での GraphQL 利用に特化していると言えます。

本記事では、AWSAppSyncClient を使用する際に実行する hydrated() 関数について解説します。

想定する読者

  • AppSync で開発を行っているヒト
  • AppSync を Lambda 上から実行しているヒト
  • AppSyncSDK を NodeJS で使用してみたいヒト

はじめに

AppSyncクライアントの使用方法

AppSync クライアントをフロントエンド ( SPA上 ) から利用する際は、下記のようにクライアントをセットアップします。( Lambda 上などの OS 上での実行の場合は設定方法が異なるので注意ください )

const client = new AWSAppSyncClient({
    url: 'https://xxxxx.appsync-api.ap-northeast-1.amazonaws.com/graphql', // AppSync Graphql Endpoint
    region: 'ap-northeast-1',
    auth: {
        type: API_KEY | API_KEY | AWS_IAM | OPENID_CONNECT | AMAZON_COGNITO_USER_POOLS
        ...
    }
});

client.hydrated().then(function (client) {
    // GraphQLのオペレーションを開始
});

上記コードのclient.hydrated() がなぜ必要なのか、AWS & Apollo ドキュメントで深く触れられていません。ウェブ SPA での SDK 利用時は特に理解する必要はないですが、気になったヒトは多いと思います。

hydrated() について、後述で解説します。

hydreated () について

hydratedPromise を返す関数

AppSyncSDKのソースコードを追うと、下記のコードにたどり着きます。

private hydratedPromise: Promise<AWSAppSyncClient<TCacheShape>>;

hydrated() {
  return this.hydratedPromise
};

ご覧の通り、hydreated() 関数はhydratedPromiseをレスポンスしています。

AppSyncClient の hydratedPromise とは

this.hydratedPromise = disableOffline ? Promise.resolve(this) : new Promise(resolve => { resolveClient = resolve; });

AppSyncClient の状態をセットアップしているのがわかります。

ここで重要なのは、ソースコードにもあるように disableOffline が有効か否かを評価している箇所です。AppSyncClient の初期状態が disableOffline パラメーターに依存して変化するということがわかります。

結論

hydreated() は、 AppSyncClient の初期化処理が終わるまで待つためのメソッドであるように見受けられます。AppSyncClient の初期状態を作る関数として呼び出しを行う必要がある、ということですね。

まとめ

AppSyncClient のドキュメントを見たり Apollo のドキュメントを見たりで、SDK の細かいところの把握するのはコスト大きいですよね。実際の開発で忙しい場合は一旦細かい仕様のキャッチアップをスキップし、実装するというのも1つだと思います。

AppSync に関する開発は、お気軽にお問い合わせください。