GraphQL スキーマの作成
GraphQL スキーマを作成して、GraphQL クエリでデータを使用できるようにします。
始める前に
必要なロール:graphql_schema_admin または admin
手順
- 移動先 すべて > システム Web サービス > GraphQL > GraphQL API.
- [新規] を選択します。
-
これらのフィールドに入力します。
フィールド 説明 名前 スキーマの名前。 スキーマ名前空間 アプリケーションの名前内で一意である必要があります。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 アプリケーション名前空間 読み取り専用。スキー マ名前空間 と連携して、同じ名前のスキーマとの競合を回避します。 有効 GraphQL スキーマをオンまたはオフにするオプション。 スキーマ GraphQL SDL 形式に準拠したスキーマ定義。有効な GraphQL 構文である必要があります。そうでない場合は、構文の問題を示すエラーメッセージが保存に表示されます。 注:次の GraphQL 機能はサポートされていません。- サブスクリプション操作
- カスタムスカラータイプ
スキーマで次のディレクティブを使用できます。
@source: GraphQL フィールドを親オブジェクトのプロパティ値にマッピングします。フィールドに個別のリゾルバースクリプトがある場合、システムは親オブジェクトの代わりにそのフィールドが解決されるレコードを使用します。この例では、スキーマでインシデントオブジェクトタイプを定義し、リゾルバースクリプトを使用して、そのタイプをインシデントテーブルの GlideRecord にマッピングします。
@sourceディレクティブを使用して、インシデントタイプ内のフィールドをインシデント GlideRecord の値またはdisplay_valueにマッピングします。type Incident { id: String @source(value: "sys_id.value") active: Boolean @source(value: "active.display_value") state: String @source(value: "state.display_value") priority: String @source(value: "priority.display_value") severity: String description: DisplayableString resolvedBy: User @source(value: "resolved_by.value") openedBy: User @source(value: "opened_by.value") child_incidents: String opened_at: String resolved_at: String closed_at: String work_notes: String comments: String @source(value: "comments.display_value") parent_incident: String } -
[ セキュリティ ] セクションで、フィールドに入力します。
フィールド 説明 承認が必要 スキーマへのアクセスに認証を要求するには、このオプションを選択します。このオプションをオフにすると、スキーマが公開されます。 ACL 承認が必要 API 全体の ACL 認証を要求するには、このオプションを選択します。[ ACL] フィールドで、GraphQL タイプの ACL を選択します。 特定のパスに対してのみ ACL 認証を使用するには、このオプションをオフのままにして、[ パス ACL 深度] フィールドで ACL を評価するレベルを指定します。
SNC 内部が必要 スキーマに SNC 内部ロールが必要な場合は、このオプションを選択します。このオプションは、明示的なロールプラグイン (com.glide.explicit_roles) が有効になっている場合にのみ表示されます。 パス ACL の深さ ACL を適用する GraphQL API のレベルを指定します。パスの深さを 3 以下に設定すると、使用するリソースが少なくなり、クエリ応答を返すのに役立ちます。 パスに使用する ACL を指定するには、GraphQL タイプの ACL を作成し、スキーマ名前空間で始まる正確な API パスを [ 名前] フィールドに追加する必要があります。例: /<planet>/<findAll>/<name>。ワイルドカードはサポートされていません。詳細については、「Configure an ACL rule」を参照してください。
注:[ ACL] フィールドは API 全体に適用され、特定のパスに適用される ACL とは無関係です。ACL 受信クエリーをチェックする GraphQL タイプの ACL を選択します。選択した ACL は API 全体に適用されます。このオプションは、[ ACL 承認が必要] が選択されている場合にのみ表示されます。 注:API は、スキーマへのアクセス権がないユーザーや、API がアクセスに認証を必要とするときに認証されていないユーザーにクリアエラーメッセージを返します。 - フォームを保存します。
- オプション:
リゾルバースクリプトを作成して、コンポーネントがフィールドをクエリしたときにスキーマが返す値を定義します。
フィールドのリゾルバーを定義しない場合、クエリは親オブジェクトタイプから一致するフィールド値を返します。たとえば、スキーマに作業メモフィールドを含むインシデントオブジェクトタイプがあるとします。インシデントオブジェクトタイプには、インシデントテーブルの GlideRecord にマップするリゾルバーがあります。作業メモフィールドのリゾルバーマッピングを作成しない場合、親オブジェクトのデータソース (インシデントテーブルの GlideRecord) で作業メモフィールドが検索され、関連する値が割り当てられます。
- [GraphQL スクリプト化リゾルバー (GraphQL Scripted Resolvers)] タブを選択し、[ 新規] を選択します。
-
フォームに入力します。
フィールド 説明 名前 リゾルバーの名前。 スキーマ 読み取り専用スキーマ名前空間。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スクリプト フィールドがクエリされたときに返される値を定義します。グローバル env オブジェクトで利用可能な関数: - getArguments():前のフィールドの引数を返します。
- getSource():親オブジェクトを返します。
このスクリプトは GlideRecord にアクセスできます。
この例では、関連付けられたフィールドがクエリされたときにユーザー テーブル からレコードを返します。
(function process(/*ResolverEnvironment*/ env) { var userid = env.getArguments().id != null ? env.getArguments().id : env.getSource(); var now_GR = new GlideRecord('sys_user'); gr.addQuery('sys_id', userid); gr.queryO; return gr; })(env); - [送信] を選択します。
- オプション:
スキーマの型リゾルバーを定義して、インターフェイスとユニオンを具象型に解決します。
- [GraphQL スクリプト化タイプリゾルバー] タブを選択し、[ 新規] を選択します。
-
フォームに入力します。
フィールド 説明 スキーマ 読み取り専用スキーマ名前空間。 タイプ スキーマで定義されているインターフェイスまたは共用体タイプ。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スクリプト ユニオンタイプとインターフェイスタイプに対して返される値を定義します。グローバル env オブジェクトで利用可能な関数: - getArguments():前のフィールドの引数を返します。
- getObject(): 親オブジェクトを返します。
- getTypeName():インターフェイスまたは Union タイプの名前を返します。
このスクリプトは GlideRecord にアクセスできます。
- [送信] を選択します。
- オプション:
リゾルバーレコードとタイプリゾルバーレコードをスキーマ内のフィールドにマッピングします。
このマッピングは、コンポーネントがフィールドをクエリしたときに返される値をシステムに指示します。
- [GraphQL スクリプト化リゾルバーマッピング (GraphQL Scripted Resolver Mappings)] タブを選択し、[ 新規] を選択します。
-
フォームに入力します。
フィールド 説明 パス マッピングするスキーマ内のフィールドへのパス。 リゾルバー フィールドによって返されるデータの定義に使用するリゾルバー。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スキーマ 読み取り専用スキーマ名前空間。 - [送信] を選択します。