GraphQLとは
GraphQLとはFacebook社が開発したクエリ言語です。サーバーとクライアントでの情報のやり取りをするために使われる言語です。まず、クライアントサイドでは、なんのデータがどのような構造でほしいのかを伝える処理を記述します。「〇〇のデータが〇〇な構造で〇〇ぐらいほしい」のような感じです。すると、サーバー側はその要望に従って、きっちりとデータを整えて整理した状態で渡してくれます。なので、非常に便利です。
REST APIとは
REST API(Representational State Transfer API)は、ウェブサービスの設計スタイルを指します。言語ではなく設計スタイルです。APIは、バックエンド側で一方的に作成され、クライアント側がAPIを呼び出すことでHTTP通信でデータを提供します。「データをください」というと、「全部渡すからいらないのは捨てたり、使いやすく整えたりして使ってください」という感じで渡されます。
GraphQLと従来のAPIの違い
-
クエリによる柔軟性: GraphQLでは、クライアントが必要とする具体的なデータの構造をクエリによって指定することができます。これにより、クライアントは必要なデータのみを取得することができ、データの過剰なフェッチ(オーバーフェッチ)や不足(アンダーフェッチ)を防ぐことが可能になります。この点は文章で正確に指摘されています。
-
開発の独立性: GraphQLを使用すると、フロントエンドとバックエンドの開発者がより独立して作業を進めることができます。これは、フロントエンドの開発者がバックエンドから必要なデータを柔軟に取得できるため、バックエンドの変更が直接フロントエンドのクエリ設計に影響を与えることが少なくなるからです。この点も文章で適切に説明されています。
従来のAPI通信によるもの
想像してみてください。あなたはレストランに行き、メニューから料理を注文します。このレストランでは、コース料理しか提供していません。例えば、あなたが魚料理を望んでいても、そのコースには前菜、スープ、デザートが自動的に含まれています。もしあなたがスープやデザートに興味がなくても、それらは提供され、結局は料理の一部を残すことになります。また、もしメニューに変更があった場合、レストランは新しいメニューを作成し、客には新しいコース全体を注文するか、または別のオプションを選ぶように促す必要があります。
ある日、レストランがメニューを更新し、新しい料理を追加したいと考えました。この変更を実現するために、レストランは新しいコースメニューを作成し、古いメニューは廃止してしまうか、そのまま維持して二つのメニューとして残します。この場合、客は新しいメニューに従って全く新しいコースを注文するか、または古いメニューから選ぶ必要があります。これは、従来のAPIでデータ構造が変更された場合に、新しいエンドポイントを作成するか、既存のエンドポイントをアップデートする必要がある状況に似ています。このプロセスはしばしば手間がかかり、クライアントとサーバーの間での調整が必要になります。
GraphQLによるもの
一方で、カスタムオーダーが可能なカフェでは、メニューに新しい飲み物やスナックを追加することが頻繁にあります。しかし、この変更はお客様の注文方法に影響を与えません。新しいアイテムがメニューに追加されたとしても、あなたはいつも通りに自分の好みに合わせて注文をカスタマイズできます。これは、GraphQLでデータ構造が変化した場合でも、クライアントのクエリを少し調整するだけで済むことに似ています。サーバー側の変更があっても、クライアントは柔軟に対応でき、新しいデータを簡単に取り入れることができます。