GraphQL スキーマの作成
GraphQL スキーマを作成して、GraphQL クエリでデータを使用できるようにします。
始める前に
必要なロール:graphql_schema_admin または admin
手順
- 移動先 すべて > システム Web サービス > GraphQL > GraphQL API.
- [新規] をクリックします。
-
これらのフィールドに入力します。
フィールド 説明 名前 スキーマの名前。 スキーマ名前空間 アプリケーションの名前内で一意である必要があります。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 アプリケーション名前空間 読み取り専用です。[スキーマ名前空間] を使用して、同じ名前のスキーマとの競合を防止します。 アクティブ アクティブな場合はオン、アクティブでない場合はオフにします。 スキーマ GraphQL SDL 形式に準拠したスキーマ定義。GraphQL の有効な構文である必要があります。そうでない場合は、保存時に構文の問題を示すエラーメッセージが表示されます。 注:次の GraphQL 機能はサポートされていません。- サブスクリプションの操作
- カスタムスカラータイプ
スキーマでは次のディレクティブを使用できます。
@source:GraphQL フィールドを親オブジェクトのプロパティの値にマッピングします。フィールドに個別のリゾルバースクリプトがある場合、システムは親オブジェクトの代わりに解決されるレコードを使用します。この例では、スキーマでインシデントオブジェクトタイプを定義し、リゾルバースクリプトを使用して、そのタイプをインシデントテーブルから GlideRecord にマッピングします。
@sourceディレクティブを使用すると、インシデントタイプ内のフィールドがインシデント GlideRecord のvalueまたは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 } -
[セキュリティ] タブを選択し、フォームに入力します。
フィールド 説明 承認が必要 スキーマに認証が必要な場合はオン、スキーマに認証が必要なく、公開利用される場合はオフにします。 SNC 内部が必要 Explicit Roles プラグインが有効になっている場合にのみ表示されます。スキーマに SNC 内部ロールが必要な場合はオン、スキーマに SNC 内部ロールが必要ない場合はオフにします。 ACL 承認が必要 スキーマに ACL 承認が必要が必要な場合はオン、スキーマに ACL 承認が必要ない場合はオフにします。 ACL [ACL 承認が必要] がオンになっている場合にのみ表示されます。[GraphQL] タイプの ACL に対する受信クエリをチェックします。 注:API は、スキーマへのアクセス権がないユーザーや、アクセスに認証が必要な場合に認証されていないユーザーに対して、明確なエラーメッセージを返します。 - フォームを保存します。
- オプション:
リゾルバースクリプトを作成して、コンポーネントが特定のフィールドをクエリしたときにスキーマが返す値を定義します。
フィールドのリゾルバーを定義しない場合、クエリは親オブジェクトタイプから一致するフィールド値を返します。たとえば、スキーマに [作業メモ] フィールドを含むインシデントオブジェクトタイプがあるとします。インシデントオブジェクトタイプには、インシデントテーブルから GlideRecord にマッピングするリゾルバーがあります。[作業メモ] フィールドのリゾルバーマッピングを作成しない場合は、親オブジェクトのデータソース (インシデントテーブルの GlideRecord) で [作業メモ] フィールドが検索され、関連付けられた値が割り当てられます。
- [GraphQL スクリプト化リゾルバー] タブを選択し、[新規] をクリックします。
-
フォームに入力します。
フィールド 説明 名前 リゾルバーの名前。 スキーマ 読み取り専用スキーマ名前空間。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スクリプト フィールドがクエリされたときに返される値を定義します。グローバル 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 スクリプト化済みタイプリゾルバー (GraphQL Scripted Typeresolvers)] タブを選択し、[新規] をクリックします。
-
フォームに入力します。
フィールド 説明 スキーマ 読み取り専用スキーマ名前空間。 タイプ スキーマで定義されているインターフェイスまたは共用タイプ。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スクリプト 共用タイプとインターフェイスタイプに対して返される値を定義します。グローバル env オブジェクトで使用できる関数。 - getArguments():前のフィールドの引数を返します。
- getObject():親オブジェクトを返します。
- getTypeName():インターフェイスまたは共用タイプの名前を返します。
このスクリプトは GlideRecord にアクセスできます。
- [送信] をクリックします。
- オプション:
リゾルバーレコードとタイプリゾルバーレコードをスキーマのフィールドにマッピングします。このマッピングにより、コンポーネントが特定のフィールドをクエリすると返される値をシステムに通知できます。
- [GraphQL スクリプト化済みリゾルバーマッピング (GraphQL Scripted Resolver Mappings)] タブを選択し、[新規] をクリックします。
-
フォームに入力します。
フィールド 説明 パス マッピングするスキーマ内のフィールドへのパス。 リゾルバー フィールドによって返されるデータを定義するために使用するリゾルバー。 アプリケーション スキーマが含まれている読み取り専用アプリケーション。 スキーマ 読み取り専用スキーマ名前空間。 - [送信] をクリックします。