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番目のパートがまもなく追加されます。 ありがとうございます!)

Source: https://habr.com/ru/post/J343872/


All Articles