GraphQL スキーマの作成

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:7分
  • GraphQL スキーマを作成して、GraphQL クエリでデータを使用できるようにします。

    始める前に

    必要なロール:graphql_schema_admin または admin

    手順

    1. 移動先 すべて > System Web Services > GraphQL > GraphQL API.
    2. [新規] を選択します。
    3. これらのフィールドに入力します。
      フィールド 説明
      名前 スキーマの名前。
      スキーマ名前空間 アプリケーションの名前内で一意である必要があります。
      アプリケーション スキーマが含まれている読み取り専用アプリケーション。
      アプリケーション名前空間 読み取り専用です。Schema 名前空間と連携して、同じ名前のスキーマとの競合を回避します。
      アクティブ GraphQL スキーマをオンまたはオフにするオプション。
      スキーマ GraphQL SDL 形式に準拠したスキーマ定義。有効な GraphQL 構文である必要があります。そうでない場合は、保存時に構文の問題を示すエラーメッセージが表示されます。
      注:
      次の GraphQL 機能はサポートされていません。
      • サブスクリプションの操作
      • カスタムスカラータイプ

      スキーマでは次のディレクティブを使用できます。

      @sourceGraphQL フィールドを親オブジェクトのプロパティの値にマッピングします。フィールドに個別のリゾルバースクリプトがある場合、システムは親オブジェクトの代わりに解決されるレコードを使用します。

      この例では、スキーマでインシデントオブジェクトタイプを定義し、リゾルバースクリプトを使用して、そのタイプをインシデントテーブルから 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
      }
    4. [ セキュリティ ] セクションで、フィールドに入力します。
      フィールド 説明
      承認が必要 スキーマへのアクセスに認証を要求するには、このオプションを選択します。このオプションをオフにすると、スキーマが公開されます。
      ACL 承認が必要 API 全体の ACL 認証を要求するには、このオプションを選択します。[ ACL] フィールドで、GraphQL タイプの ACL を選択します。

      特定のパスに対してのみ ACL 許可を使用する場合は、このオプションをオフのままにして、[ パス ACL の深さ(Path ACL depth )] フィールドで ACL を評価するレベルを指定します。

      SNC 内部が必要 スキーマに SNC 内部ロールが必要な場合は、このオプションを選択します。このオプションは、明示的なロールプラグイン (com.glide.explicit_roles) が有効になっている場合にのみ表示されます。
      パス ACL の深さ ACL を適用する GraphQL API のレベルを指定します。パスの深さを 3 以下に設定すると、使用するリソースが少なくなり、クエリ応答を返すのに役立ちます。

      パスに使用する ACL を指定するには、GraphQL タイプの ACL を作成し、スキーマ名前空間で始まる正確な API パスを [ 名前 ] フィールドに追加する必要があります。例:/<planet>/<findAll>/<name> ワイルドカードはサポートされていません。詳細については、「Configure an ACL rule」を参照してください。

      注:
      [ACLs] フィールドは API 全体に適用され、特定のパスに適用される ACL とは無関係です。
      ACL 受信クエリを確認する GraphQL タイプの ACL を選択します。選択した ACL は API 全体に適用されます。このオプションは、[ ACL 認証が必要 ] が選択されている場合にのみ表示されます。
      注:
      API は、スキーマにアクセスできないユーザー、または API がアクセスするために認証を必要とするときに認証されていないユーザーに明確なエラーメッセージを返します。
    5. フォームを保存します。
    6. オプション: リゾルバースクリプトを作成して、コンポーネントがフィールドをクエリしたときにスキーマが返す値を定義します。
      フィールドのリゾルバーを定義しない場合、クエリは親オブジェクトタイプから一致するフィールド値を返します。たとえば、スキーマに [作業メモ] フィールドを含むインシデントオブジェクトタイプがあるとします。インシデントオブジェクトタイプには、インシデントテーブルから GlideRecord にマッピングするリゾルバーがあります。作業メモフィールドのリゾルバーマッピングを作成しない場合、システムは親オブジェクトのデータソース (インシデントテーブルの GlideRecord) で作業メモフィールドを検索し、関連する値を割り当てます。
      1. [GraphQL スクリプト化リゾルバー (GraphQL Scripted Resolvers)] タブを選択し、[ 新規] を選択します。
      2. フォームに入力します。
        フィールド 説明
        名前 リゾルバーの名前。
        スキーマ 読み取り専用スキーマ名前空間。
        アプリケーション スキーマが含まれている読み取り専用アプリケーション。
        スクリプト フィールドがクエリされたときに返される値を定義します。グローバル 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);
      3. [Submit (送信)] を選択します。
    7. オプション: スキーマの型リゾルバーを定義して、インターフェイスと共用体を具象型に解決します。
      1. [GraphQL Scripted Type Resolvers (GraphQL スクリプト化型リゾルバー)] タブを選択し、[ New (新規)] を選択します。
      2. フォームに入力します。
        フィールド 説明
        スキーマ 読み取り専用スキーマ名前空間。
        タイプ スキーマで定義されているインターフェイスまたは共用タイプ。
        アプリケーション スキーマが含まれている読み取り専用アプリケーション。
        スクリプト 共用タイプとインターフェイスタイプに対して返される値を定義します。グローバル env オブジェクトで使用できる関数。
        • getArguments():前のフィールドの引数を返します。
        • getObject():親オブジェクトを返します。
        • getTypeName():インターフェイスまたは共用タイプの名前を返します。

        このスクリプトは GlideRecord にアクセスできます。

      3. [Submit (送信)] を選択します。
    8. オプション: リゾルバーレコードとタイプリゾルバーレコードをスキーマ内のフィールドにマッピングします。
      このマッピングは、コンポーネントがフィールドを照会したときに返される値をシステムに指示します。
      1. [GraphQL Scripted Resolver Mappings (GraphQL スクリプト化リゾルバーマッピング)] タブを選択し、[ New (新規)] を選択します。
      2. フォームに入力します。
        フィールド 説明
        パス マッピングするスキーマ内のフィールドへのパス。
        リゾルバー フィールドによって返されるデータを定義するために使用するリゾルバー。
        アプリケーション スキーマが含まれている読み取り専用アプリケーション。
        スキーマ 読み取り専用スキーマ名前空間。
      3. [Submit (送信)] を選択します。