アポロリンク。 GraphQLクライアントを「自分用に」構成します

Apolloクライアントのネットワーク層とその個別の使用



ニーズに合ったライブラリを見つけたかもしれませんが、いくつかの特定のタスクを解決していません。 また、これらのタスクは主な機能とは関係ありませんが、アプリケーションの重要な部分です。 同様のことが、ネットワークレベルの最新のGraphQLクライアントで発生します。 このような課題に応えて、Apollo Linkライブラリを作成しました。 GraphQLクエリの進行を管理し、結果を処理するためのフレームワークを提供します。







開発をスピードアップするために、標準のApollo Linkモジュールは、通常のHTTPリクエストからWebソケットを介した変更のサブスクライブ、繰り返しおよびバッチ送信、重複リクエストのフィルタリング、リソースの同期的な定期的なポーリングを含むリクエストのフローの制御まで、GraphQLネットワークスタックの基本機能を実装します。







翻訳者のメモ-オリジナルの記事では、ネットワークモジュールはリンクという言葉と呼ばれています。 これは、モジュールを連結するリンカーとしてのApollo Linkの本質を反映しています。 ただし、Linkの文字通りの翻訳は意味を歪めるため、記事の後半ではモジュールはコネクタと呼ばれます。







プロパティを指定してGraphQLクライアントを作成するには、Apollo Linkコネクターを目的の順序でユーザーコネクターに接続します。 チェーンに追加されたコネクタは、リクエストの進行に影響します。たとえば、再送信を提供します。 結果のコネクタは、 ExecutionResult



(データ+エラー)を返す場合があります。 これは、たとえば、テスト用のスプーフィングデータ、アプリケーションのローカル状態、またはほとんどの場合、GraphQLサーバーへのクエリの結果です。







画像

HTTPコネクター。







さまざまなアプリケーション要件をサポートするために、各GraphQL応答はObservable



オブジェクトによって表されます。 オブザーバーは、同じメソッドを使用してnext



error



complete



イベントをサブスクライブし、イベントハンドラーを実行できます。 next



メソッドは、 error



またはcomplete



ケルベックが発火する前に何度でも呼び出すことができます。 このようなケルベック構造は、クエリ、ミューテーション、サブスクリプション、さらにはライブクエリなど、現在および計画されているGraphQLの結果を操作するのに最適です。









この記事では、Apollo Linkを使用してGraphQLクライアントを段階的に作成します。 結果はグラフi QLに表示されます。







すべてのGraphQLクライアントの主なタスクは、GraphQLの結果を取得することです。 それでは、HTTPリクエストを行うコネクタを作成することから始めましょう。 Firebase、XHR、REST、その他のGraphQLエンドポイントの使用など、他のトランスポートレイヤーコネクタの有用な例になります。 すべてのコネクターは、コネクターを接続するためのメソッドを含み、 request



メソッドを実装するために必要な基本クラスから継承します。







CodeSandboxでのサンドボックスの実装をご覧ください









トランスポートコネクタを作成した後の次のタスクは、コネクタを結合して要求処理スレッドにすることです。 これを行うには、エラーをインターセプトして結果のGraphQLデータの形式で表示する別のコネクタと、操作と結果を記録する別のコネクタを作成します。 ロギングコネクタが最初に使用され、次にエラーをキャッチし、最後にHTTPコネクタがリクエストを実行します。







画像

コネクタの適用のシーケンス。







チェーンが機能するためには、ロギングおよびインターセプトコネクタが、後続のコネクタにアクセスできる必要があります。 このため、 request



メソッドにはforward



引数があります。 これは、呼び出されると、操作オブジェクトを次のコネクタに渡し、そのオブザーバを返す関数です。 例の最後で、コネクタはApollo Linkの静的from



メソッドを使用してチェーンされています。







CodeSandboxのサンドボックスでこのチェーンの例をご覧ください







個々のGraphQLクエリの変更



わあ! これで、作成されたGraphQLクライアントがリクエストとレスポンスの進行を制御します。 しかし、クエリと突然変異に異なる動作が必要な場合はどうでしょうか? 次の例では、ミューテーションに他のエンドポイントを使用します。また、データを要求し、すべてのネットワークアクティビティがログに記録される場合にのみエラーもキャッチされます。







これに加えて、トランスポートを変更せずに操作を選択的に変更できます。たとえば、操作に特定の名前がある場合、クエリ変数を追加できます。 split



メソッドを使用すると、Apollo Linkでは、操作のパラメーターに応じてチェーンの特定の部分を実行できます。







CodeSandboxのサンドボックスのご覧ください







GraphQLクライアントを作成する



いいね! これで、完全にカスタマイズ可能なGraphQLクライアントを作成できます。GraphQLクライアントの実行ロジックとデータ取得は、特定のクエリに依存します。 Apollo Linkには多くの既成のコネクタが用意されており、独自のコネクタと組み合わせて拡張し、目的の動作を実現できます。 既製のコネクターは、Apollo Linkリポジトリーにあります







Apollo Linkエコシステムは、開発者のコ​​ミュニティのおかげで常に進化しています。 開発に参加したい場合、またはGraphQLクライアントの設定メカニズムについて議論したい場合は、適切なリクエストを作成してください-発行またはプルリクエスト。 協力の提案があれば、 Apollo Slackに接続してプライベートメッセージを私(evans)に送ってください!







すぐに、GraphQL操作のcontext



フィールドを使用したコネクタ間の相互作用、状態のあるコネクタとないコネクタ、コネクタ設定の配布、安全な型の追加などに関する記事を待ちます!







Sashko Stubailo、James Baxley III、Jonas Helferに、Apollo Link開発プロセスの包括的な説明と、著者の継続的な支援に感謝します。







Apollo Link:カスタムGraphQLクライアントの記事の翻訳を作成します

エヴァンス・ハウザー原作








All Articles