Drupal 8を使用したGraphQL:知っておくべきすべてのガイド(例付き!)

公開: 2019-12-17

GraphQLはHTTPでDrupalと通信し、出力はこれまでになく構造化されています。

今日、優れたカスタマーエクスペリエンスは、優れたコンテンツから始まります。 どこでも利用できるコンテンツ。 Drupal 8のAPIファーストイニシアチブにより、Drupalによって管理されるコンテンツは、HTTPを介して他のシステムで簡単に使用できます。 REST(Representational State Transfer)は、APIの設計標準を提供します。 ただし、クライアントアプリケーションがより複雑で困難になるにつれ、開発者はより現代的で効果的なソリューションを必要としています。

drupal8を使用したGraphQL



GraphQLは、より柔軟で強力なクライアント/サーバー相互作用の要求から生まれました。 洗練されたクエリ言語であり、実行マシンです。 2012年、Facebookはその仕様を作成しました。この仕様には、ヘッドレスアプリケーションの機能とデータモデルの要件が記載されています。

GraphQLとは何ですか?

GraphQLはAPIの適応標準であり、これらのクエリを実行するためのランタイムを提供します。 GraphQLは、APIの情報の完全で合理的​​な詳細を提供します。 それは「必要なものを求め、それを正確に得る」というイデオロギーで開発されました。 これにより、クライアントはAPIから必要な正確な応答を取得できるようになり、それ以上でもそれ以下でもありません。

GraphQLの利点

DrupalにGraphQLを使用することの多くの利点のいくつか-

  1. フロントエンド開発の高速化

    新しいバックエンドエンドポイントを待たずに、アプリケーションをすばやく強調します。 必要な形でデータを取得することにより、データのフェッチとコードのメンテナンスを改善します。
  2. 必要なものを尋ねて、それを正確に入手してください

    クライアントが要求した正確な応答を提供します。 常に予測可能な結果を​​返します。 GraphQLを使用するアプリケーションも、サーバーではなく、取得するデータをアプリケーションが制御するため、安定しています。
  3. 既存のデータを使用する

    GraphQLは、REST、SOAP、既存のデータベースなど、既存のインフラストラクチャで使用できます。 これにより、1つのリクエストですべてのデータをクエリでき、クリーンな予測可能な応答が提供されます。
  4. より少ないバイトとラウンドトリップ

    GraphQLを使用すると、必要なすべてのデータを単一のクエリを使用してフェッチできます。 それは
    アプリケーションを高速化します。
drupal-graphql

Drupal8を使用したGraphQL

RESTとJSON:APIとGraphQL

リクエストの効率に応じてこれら3つを比較すると、JSON:APIとGraphQLが優れています。 単一のリクエストでJSON:APIとGraphQlが必要なすべての応答を提供できるためです。 JSON:APIの場合、応答を調整する必要がある場合がありますが、GraphQLに関しては、必要なものだけを提供します。 共通のニーズを満たすには複数のリクエストが必要なため、RESTはこれらに比べて低速です。

操作の単純さと実装の観点から、RESTは最も簡単で、かなり前から存在しています。 JSON:APIは、CDNおよびリバースプロキシでもすぐに使用できます。 GraphQLの場合、追加のインフラストラクチャが必要であり、それを実装するにはクライアントライブラリが必要です。

GraphQLと比較して、RESTおよびJSON:APIでWebキャッシュを使用する方が簡単です。 GraphQLでは、すべてのクエリが送信されるエンドポイントは1つだけです(ほとんどの場合、HTTP POSTエンドポイント)。 各クエリは異なる可能性があるため、このタイプのキャッシュを使用するのは困難です。

Drupal GraphQL仕様は、すでに実装したミューテーションのバルク/バッチ操作を自動的にサポートしますが、JSON:API仕様はサポートしません。 バッチ書き込み操作を実行する機能が重要になる場合があります。

Drupal8用のGraphQLのインストール

Drupal GraphQLモジュールは、すべてのGraphQL仕様をサポートし、GraphQLスキーマの構築と公開に使用できます。 バージョン8.x-4のDrupal8モジュールの最新のアルファリリースは、プラグインを使用してスキーマを拡張するためのDrupalモジュールの機能を提供します。

ここからDrupalGraphQLモジュールをインストールできます-https://www.drupal.org/project/graphql
composerコマンドを使用してインストールできます。

 作曲家は 'drupal /graphql:^3.0'を必要とします

GraphQLCoreとGraphQLの2つのモジュールを提供します。 両方のモジュールを有効にする必要があります。 あなたはdrushを使用してそれを有効にすることができます例えば

drush engraphql
drush engraphql_core

DrupalGraphQLを使用したクエリ

Drupal GraphQLモジュールは、 GraphiQLと呼ばれるツールを提供します。 これは強力なツールであり、オートコンプリートなどの機能を備えたインタラクティブなUIを備えています。 このツールを使用すると、クエリを実行して出力を取得できます。 インターフェイスの「 / graphql / explorer 」に移動します。

次のようなUIが表示されます–

GraphQL-UI

GraphiQL UI

このUIの左側のパネルにはクエリを記述でき、右側には結果がJSON形式の出力として表示されます。 右上隅にあるドキュメントをクリックすると、利用可能なクエリのドキュメントが表示されます。 左下のパネルの[クエリ変数]セクションを使用して、クエリ変数を渡すことができます。

1.ノードのクエリ

Quering-nodes-graphql

DrupalGraphQL-ノードのクエリ

2.分類法のクエリ

DrupalGraphQL-分類法のクエリ

DrupalGraphQL-分類法のクエリ


3.ルートのクエリ

DrupalGraphQL-ルートのクエリ

DrupalGraphQL-ルートのクエリ

4.クエリフラグメント

DrupalGraphQL-クエリフラグメント

DrupalGraphQL-クエリフラグメント

5.フィルター

DrupalGraphQL-フィルター

DrupalGraphQL-フィルター

6.接続詞付きのフィルター

DrupalGraphQL-接続詞を使用したフィルター

DrupalGraphQL-接続詞を使用したフィルター

その他の使用可能な演算子は次のとおりです。

  • 同等
  • NOT_EQUAL
  • より小さい
  • SMALLER_THAN_OR_EQUAL
  • GREATER_THAN
  • GREATER_THAN_OR_EQUAL
  • ありませんで
  • お気に入り
  • 好きじゃない
  • の間に
  • NOT_BETWEEN
  • 無効です
  • IS_NOT_NULL

接続詞は2つの値を持つことができます

  • また

グループを使用して、より複雑なクエリを作成することもできます

7.GraphQL変数

DrupalGraphQL-変数

DrupalGraphQL-変数

突然変異

GraphQLでは、ミューテーションとは、サーバーに保存されているデータを追加、変更、または削除するときに使用される用語です。 この場合、Drupalです。 残念ながら、GraphQLのいくつかの技術的要件のため、モジュールには、箱から出して一般的なミューテーションを実行する方法が含まれていません。
作成、削除、更新、およびファイルのアップロードのサンプルコードは、https://github.com/drupal-graphql/graphql-examplesにあります。

突然変異の例:

DrupalGraphQL-ミューテーションの例

DrupalGraphQL-ミューテーションの例

Twigを使用したDrupalGraphQL

Drupal GraphQLをTwigで使用すると、Webサイトのパフォーマンスを大幅に向上させることができます。 方法は次のとおりです– Twigテンプレートにデータを挿入すると、1回のAPI呼び出しを使用して必要なすべてのデータをフェッチできます。 さらに、クライアントはサーバーではなく取得するデータを制御するため、プロセスがさらに高速になります。

Drupal GraphQLをTwigで使用するには、GraphQLTwigモジュールが必要です。 ダウンロードして有効にするには、次のコマンドを使用します。

 作曲家は 'drupal /graphql_twig:^1.0'を必要とします
drush engraphql_twig

そして、あなたはあなたのウェブサイトでGraphQLクエリを使うことができます例えば

{#graphql
クエリ{
  admin:userById(id: "1"){
    uid
    名前
  }
  user:currentUserContext {
    uid
  }
}
#}

GraphQL変数で応答データを取得します。