GraphQL


GraphQLとは?
GraphQLは、Facebook上で作成されたアプリケーション層のクエリー言語です.
通常、REST APIは、APIの実装時に使用される.このようにAPIを実装するには、クライアントが任意の機能を必要とする場合に新しいAPIを作成する必要がある.
GraphQLは、クライアントから必要なデータを効率的に取得し、これらの問題を改善するためのクエリー言語です.
GraphQLとREST APIの違い
APIのEndPoint
REST APIでは、各リソースには、リソースのほとんどのコンテンツを担当するEndPointがあります.
しかし、GraphQLの場合、API全体に使用されるエンドポイントは1つしかありません.
API応答構造
同様に、REST APIでは、1つのエンドポイントから返すことができる応答構造は固定され、GraphQLは応答構造をユーザに必要な方法に変換することができる.
  • REST API応答構造
  • GraphQL応答構造
  • APIリクエスト
    複数のリソースにアクセスする必要がある場合、REST APIは複数のリクエストを必要とし、GraphQLは複数のリソースに一度にアクセスすることを許可する.
    API処理方法
    REST APIでは、各要求はエンドポイントで定義されたHandling関数を呼び出してタスクを処理し、GraphQLは各要求フィールドのResolverを呼び出してタスクを処理する.
    GraphQL vs REST API
    一つだけを選ぶよりも、状況に応じて選んだほうがいい.
    異なる形状の異なる要求に応答する必要がある場合、GraphQLを使用することがより有利であり、要求がファイル転送などの単純なテキストとして処理されない場合、または構造化応答が必要である場合、REST APIを使用することがより有利である.
    GraphQL構造
    Query/Mutation
    Queryはデータの読み出し(R)、Mutationはデータの変更(CUD)に使用します.
    Schema/Type
    データベース内のSchemaに対応するGraphQLの構造.
    未宣言フィールドに対応するデータは使用できません.
    type Model {
      name: String!
      subModels: [SubModel!]!
    }
  • オブジェクトタイプ:モデル
  • フィールド:name,サブModels
  • スカラータイプ:String、ID、Intなど
  • 感嘆符(!):必須かどうか
  • 角括弧([,]):配列
  • を表す
    Resolver
    GraphQLのクエリーはGraphQLのライブラリに割り当てられ、データベース内のデータはResolverを実装することによって処理されます.
    GraphQLクエリでは、各フィールドにResolverと呼ばれる特定のタイプの関数が返されます.フィールドがスカラーでない場合、このタイプのResolverが呼び出されます.
    Introspection
    既存のREST API構造では、クライアントはAPIコンポーネントを理解するためにAPIリストを交換するプロセスを必要とする.しかしGraphQLでは,サーバ上でモードを定義して確認できるInterospectionという機能がある.
    Interospection機能を使用すると、サーバ側はAPIリストを別途要求することなく、アーキテクチャ情報をリアルタイムで共有できます.
    References
  • https://tech.kakao.com/2019/08/01/graphql-basic/
  • https://www.holaxprogramming.com/2018/01/20/graphql-vs-restful-api/