GraphQL-APIの新しい外観。 パート1

みなさん、こんにちは。GraphQLの蓄積された知識を共有したいと思います。これは、約100の記事/ドックの読み取りとGraphQLを使用してAPIを構築した月に基づいて形成されました。



それでは、GraphQLとは何ですか?



GraphQLは、データを取得するためのデータ構造とメソッドを宣言するための標準であり、クライアントとサーバー間の追加レイヤーとして機能します。



GraphQLの主な機能の1つは、データの構造と量がクライアントアプリケーションによって決定されることです。



単純なユーザーリクエストの例を考えてみましょう。







クライアントは、JSON形式に非常に類似した宣言的なグラフのような構造を使用して、受信するデータを正確に示します。



この場合、クライアントは3つのフィールド(名前、電子メール、および年齢)を要求します。 ただし、名前などの単一のフィールドと、GraphQLサーバーのユーザータイプで定義されている任意の数のフィールドの両方を要求できます。



このアプローチでは、利便性に加えて、トランスポートレベルでのリクエスト数またはデータ量を削減しました。



GraphQLを使用すると、複数のソースからのデータを簡単に集約できます。



簡単なクライアント/サーバーアーキテクチャを見てみましょう。





クライアントアプリケーションと1つのサーバーがあります。 データ転送は非常にシンプルに見えますが、

どのデータ転送プロトコルがこれに使用されるかは関係ありません。 httpの場合、リクエストを送信してレスポンスを取得します。すべてが非常に簡単です。







前述したように、GraphQLはクライアントとサーバーの間の追加のレイヤーであり、このアーキテクチャを見ると、GraphQLの使用は一種の冗長に見えます。



しかし、別のサービスが追加されるとすぐに、すべてが適切に配置されます。



サービスは任意のプログラミング言語で記述でき、異なるデータベース、SqlまたはNoSqlと対話でき、異なるAPIを使用できます。 このようなアーキテクチャでの作業は非常に難しくなり、新しいサービスを追加するたびに多くのリソースが必要になります。



これは、プロジェクトのスケーリングに関する古典的な問題であり、複数のサービスを使用する場合は、おそらくある種の「API Gateway」を使用するでしょう。



GraphQLは、この標準化されたAPIゲートウェイです。 クライアントサーバーデータ転送は、任意のプロトコル(http、ssh、ws、cliなど)を使用して実行できます。



クライアントは、GraphQLクエリを使用してGraphQLサーバーにリソースを要求します。 GraphQLサーバーはクエリを分析し、再帰的にグラフを調べて、各フィールドに対して「リゾルバー」機能を実行します。 要求に関するすべてのデータが収集されると、GraphQLサーバーは応答を返します。



新しいサービスを追加しても、既存のアプリケーションには影響しないことに注意してください。 クライアントが受信するデータを決定するという事実により、既存のタイプを拡張することを恐れることはできません。



型システム



GraphQLは型システムを使用してデータを記述します。





GraphQLでは、フィールドは基本タイプとユーザータイプの両方で表すことができます。 この例では、ユーザーフィールドはユーザータイプUserで表されます。 ユーザータイプは、基本タイプで表される一連のフィールドを記述します。



したがって、ネストの不定レベルのグラフのような構造が実現されます。



GraphQL APIとREST APIを比較する





最初のパートのこの終わりに、2番目のパートがまもなく追加されます。 ありがとうございます!)



All Articles