リソース

GraphQLとは

GraphQLとは?

GraphQLは、RESTに代わるものとして作られたAPIとの通信方法である。

01新しいクエリ言語

GraphQLは、Facebookとその開発者コミュニティによって開発されたAPI用のクエリ言語です。2018年6月に初公開され、現在では市場で広く認知されるようになった成熟した技術です。その結果、認知度も高く、多くの企業が導入を選択しています。どう違うのかをお伝えするために、今でも最も広く使われているものを見ておく必要があります。RESTとそれがベースになっているものGraphQLはRESTの主要な問題を解決しているため、RESTの後継と呼ばれることがよくあります。ご存知の通り、RESTは一種の古いシステム設計に基づいています。それによると、各データモデルは別々のアドレスで利用可能です。例えば、洋服のオンラインショップを持つ場合、以下のようなデータベースアドレスを持つことができます。

  • /カート
  • /ウェアハウス
  • /プロダクト
  • /発見
  • などなど・・・。
GraphQL クエリ言語

02欲しいものだけを手に入れる

実際、このようなアドレスの数は決して少なくない。それどころか、システムとともに増えていくだろう。ほとんどすべてのアドレスに対して、get、post、put、deleteのリクエストを処理するための一連のコールを作成する必要があることに留意してください。その結果、維持すべきアドレスの数が膨大になり、データを取得するために必要な呼び出しもさらに膨大になります。GraphQLは全く異なる方法で動作します。私たちはたった1つのアドレス、つまり真実の源を持ち、そこからデータを要求することができるのです。何が得られるかは、私たち自身とクエリの作り方次第なのです。

GraphQLクエリ

03柔軟なクエリ

GraphQLの大きな特徴は、APIから取得したいデータを厳密に定義した上で、柔軟なクエリを実行できることです。また、ネストされたクエリを作成することも可能であり、これらの点でREST APIに対してより優位に立つことができる。

GraphQLクエリ

04プラットフォーム非依存

RESTとGraphQLの共通点の1つは、プラットフォームやプログラミング言語への依存性がないことです。もうひとつの共通点は、同じ操作のべき等性です。RESTアーキテクチャもGraphQLも、retrieve、modify、deleteといった操作は、結果を変えることなく繰り返し使用することができる。

RESTとGraphQLの比較

05基本要素

GraphQLの基本要素は、「変異」です。

  • クエリ:データを取得するためのGraphQLの基本的なフェッチ操作。重要な違いは、クエリを構造化して必要なものだけを取得することで、要求したデータを正確に取得できることです
  • mutation: GraphQLにおける基本的なデータ操作で、データの作成、変更、削除を行うことができます。
  • スキーマ: すべてのGraphQLプロジェクトの基盤で、ロジックと機能を記述します。SDL(Schema Definition Language)で記述され、主な構成要素は型とフィールドです。 リゾルバ: GraphQLスキーマとバックエンドをつなぐために使用する関数で、操作をデータに変換し、文字列、整数、NULL、その他のプリミティブを返すことができます。
  • resolver: GraphQLスキーマとバックエンドを接続するための関数で、操作をデータに変換し、文字列、整数、NULL、その他のプリミティブを返すことができる。
GraphQL Mutation

06スキーマ定義言語

GraphQLは独自の構文を使っています。SDLまたはSchema Definition Languageです。これは、APIのスキーマとその型やフィールドを指定するために使用されます。型はtypeキーワードで宣言し、フィールドは各オブジェクトの型ごとに括弧で囲んで追加します。

GraphQLスキーマ

07成長するコミュニティ

GraphQLはまだRESTほど普及していませんが、そのコミュニティは急速に拡大しています。すでにGitHub、Netflix、PayPal、Shopifyなど、多くの主要な採用企業がある。今後、さらに増えていくのは時間の問題だろう。

GraphQLコミュニティ

GraphQL

  • 階層。REST APIは、リソースのアドレスにUniform Resource Identifiers(URI)を使用します。これは、すべてが単純な階層構造に従うことを意味し、小規模なプロジェクトでは問題ありませんが、大規模なプロジェクトやより複雑なプロジェクトでは多くの問題を引き起こす可能性があります。
  • 複数のラウンドトリップ。REST APIは階層構造になっているため、通常は多くのエンドポイントを持ち、クライアントは必要なデータをすべて取得するために複数回の呼び出しを必要とします。
  • フェッチの過不足:階層的な構造と柔軟なクエリの欠如により、REST APIは通常、不必要なデータを取得しすぎたり、必要なデータをすべて取得するために複数の呼び出しを必要としたりします。これは明らかに帯域幅とパフォーマンスの両方に影響し、通常、アプリケーションが大規模になるほど、さらに悪化します。

REST

  • 過不足のない取得:GraphQLは柔軟なクエリを使用し、必要なものだけを正確に取得することを保証します。何度も呼び出す必要がなく、過剰なデータを受け取ることもなく、1つの特別なクエリですべてを処理できます。
  • シングルエンドポイント同様に、エンドポイントは1つだけでよい。クエリーの構造によって、必要なものを得ることができます。データをどのように整理するかは関係なく、クエリーを正しく構築しさえすれば、完全に混乱した状態からでも必要なものを得ることができるのです。
  • これは、クライアントに公開されるすべてのAPIがスキーマ定義言語で記述されていることを意味し、データの不整合をなくし、エラーの発見をより容易にします。
LeftCircle

なぜGraphQLを使うのか?

GraphQLのパフォーマンスに関する利点は、すべてのリソースを提供するために単一のエンドポイントしか必要としないため、明らかです。もちろん、必要なデータによってはクエリが非常に複雑になる可能性がある。とはいえ、1つの複雑なクエリを管理することは、多数のエンドポイントを持ち、そこから必要なデータを実際に取得するためにさらに多くの単純なクエリを必要とするよりもずっと簡単です。マイクロサービスによる複雑なアプリケーションでは、RESTよりもGraphQLの方が単純に優れています。シンプルなアプリケーションではRESTを使用しても問題ありませんが、そのアプリケーションが大きくなった場合、上記のような問題に直面し、それを避けるために再構築するのは大変なことです。

デモを依頼する

カスタマイズされたライブデモを体験して、なぜGraphQL Editorがマニュアルに別れを告げる正しい選択なのかを知ってください。