GraphQL API フレームワークを使用したレコードデータのクエリ
コンポーネントまたはサードパーティシステムからレコードデータをクエリするためのカスタム GraphQL API を作成します。
たとえば、SLA に関連付けられたケースを表示するコンポーネントを作成できます。この ネクストエクスペリエンス UI フレームワーク を使用して必要なコンポーネントを開発し、ケーステーブルのデータを定義する GraphQL スキーマを作成することで、プラットフォームからケースデータにアクセスできます。
コンポーネントの開発の詳細については、「 ワークスペースのコンポーネントの開発」を参照してください。
GraphQL のメリット
GraphQL は、クライアント側の開発用に最適化された Web クエリ言語です。スクリプト化された GraphQL を使用すると、次のことができます。
- イントロスペクションを通じてクエリに使用できるフィールドとオブジェクトを検出します。
- コンポーネントから必要な正確なデータをクエリします。
- REST 要求に対して複数のエンドポイントを使用するのではなく、単一の API から考えられる複数のクエリを管理します。
- スキーマを公開して、サードパーティシステムと統合します。
- コンポーネントから GraphQL クエリを生成し、応答を処理します。
使用前の注意事項
カスタム GraphQL API の作成を開始する前に、次のことを確認してください。
- スキーマを作成するための GraphQL ナレッジ。
- API 動作を定義するための JavaScript の知識。
- Web コンポーネントの概念に関する一般的な知識。
- レコードデータを消費するカスタム ワークスペース コンポーネント。
- スキーマで公開する ServiceNow データモデルについて理解する。
- GlideRecord ナレッジを使用して、フィールドをリゾルバースクリプトのレコードデータにマッピングします。
GraphQL の概要
スクリプト化された GraphQL API の作成には、次の部分が含まれます。
- GraphQL スキーマ定義言語 (SDL)
- GraphQL クエリで使用できるフィールドの構造とデータ型を定義します。GraphQL スクリプトスキーマ [sys_graphql_schema] テーブルの スキーマ スクリプトフィールドを使用して、SDL を定義できます。SDL は、クエリ操作とミューテーション操作のみをサポートしています。
- リゾルバー
- 各フィールドから返されるデータを定義します。[GraphQL スクリプトスキーマ] フォームの [GraphQL スクリプトリゾルバー] 関連リストで、各フィールドのリゾルバーを定義できます。
- タイプリゾルバー
- インターフェイスとユニオンを具体的な GraphQL タイプに解決します。たとえば、
インシデントタイプと問題タイプのユニオンを定義することができます。typeresolver スクリプトを使用して、いつどのものを返すかを定義します。[GraphQL スクリプトスキーマ] フォームの [GraphQL スクリプト型リゾルバー] 関連リストでタイプリゾルバーを定義できます。 - リゾルバーマッピング
- リゾルバーをスキーマ内のフィールドにマッピングします。リゾルバーマッピングは、[GraphQL スクリプトスキーマ] フォームの [GraphQL スクリプト化されたリゾルバーマッピング] 関連リストで定義できます。
GraphQL クエリ言語の詳細については、 GraphQL の Web サイトを参照してください。
GraphQL API へのクエリをテストするには、統合された GraphQL テストツールである GraphQL エクスプローラーを使用できます。詳細については、「GraphQL エクスプローラーで GraphQL API をテストする」を参照してください。
制限事項
次の GraphQL 機能はサポートされていません。
- サブスクリプション操作
- カスタムスカラータイプ
イントロスペクション
デフォルトでは、カスタムスキーマへのイントロスペクションクエリは有効になっていません。イントロスペクションをオンにするには、「 GraphQL スキーマのイントロスペクションクエリを有効にする」を参照してください。
名前空間
GraphQL API には、次の 2 つの異なる名前空間があります。
- アプリケーション名前空間
- カスタムアプリケーションの名前空間。アプリケーション名前空間の詳細については、「 アプリケーションスコープ」を参照してください。
- スキーマ名前空間
- すべてのクエリが一意であることを確認するためのスキーマの名前空間。1 つのアプリケーションに複数のスキーマ名前空間を含めることができます。
データをクエリするときは、クエリに両方の名前空間を含める必要があります。たとえば、次のクエリは、次の名前空間を持つデータを検索しています。
- アプリケーション名前空間:
x_graph_scope - スキーマ名前空間:
惑星
query {
x_graph_scope {
planet {
findAll {
name
mass
distance
}
}
}
}ディレクティブとグローバル関数
@sourceスキーマディレクティブGraphQL フィールドを親オブジェクトのプロパティ値にマッピングします。フィールドに個別のリゾルバースクリプトがある場合、システムは親オブジェクトの代わりにそのフィールドが解決されるレコードを使用します。
スキーマスクリプトで
@sourceディレクティブを使用します。@deferクエリディレクティブ- GraphQL フラグメントの処理をクエリの後半まで保留します。このクエリディレクティブを使用して、フラグメント内の応答が遅いフィールドのデータの返却を遅らせます。保留されたフラグメントのフィールド結果をマルチパート応答としてストリーミングします。注:
@deferディレクティブを使用するには、GraphQL クライアントがマルチパート/混合 HTTP ヘッダーを受け入れる必要があります。たとえば、HTTP ヘッダーをAccept: multipart/mixed; boundary="-"に設定します。@deferディレクティブを使用して、ユーザーのインタラクション時間を短縮します。 このクエリディレクティブを無差別に適用すると、パフォーマンスが低下する可能性があるため、避けてください。パフォーマンステストを実施して、パフォーマンスを向上させるために保留できるフィールドを決定します。 - リゾルバー関数
これらの関数は、グローバル env オブジェクトで使用できます。
- getArguments():前のフィールドの引数を返します。
- getSource():親オブジェクトを返します。
リゾルバースクリプトで使用します。
- Typeresolver 関数
これらの関数は、グローバル env オブジェクトで使用できます。
- getArguments():前のフィールドの引数を返します。
- getObject(): 親オブジェクトを返します。
- getTypeName():インターフェイスまたは Union タイプの名前を返します。
タイプリゾルバースクリプトで使用します。
デモアプリケーション
ミューテーションとクエリを含むデモ GraphQL PTO カレンダースキーマを表示するには、GraphQL フレームワークデモアプリケーションプラグイン (com.glide.graphql.framework.demo) を有効にします。