GraphQL スキーマの作成

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む6読むのに数分
  • GraphQL スキーマを作成して、GraphQL クエリでデータを使用できるようにします。

    始める前に

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

    手順

    1. 移動先 すべて > システム Web サービス > GraphQL > GraphQL API.
    2. [新規] をクリックします。
    3. これらのフィールドに入力します。
      フィールド 説明
      名前 スキーマの名前。
      スキーマ名前空間 アプリケーションの名前内で一意である必要があります。
      アプリケーション スキーマが含まれている読み取り専用アプリケーション。
      アプリケーション名前空間 読み取り専用です。[スキーマ名前空間] を使用して、同じ名前のスキーマとの競合を防止します。
      アクティブ アクティブな場合はオン、アクティブでない場合はオフにします。
      スキーマ 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. [セキュリティ] タブを選択し、フォームに入力します。
      フィールド 説明
      承認が必要 スキーマに認証が必要な場合はオン、スキーマに認証が必要なく、公開利用される場合はオフにします。
      SNC 内部が必要 Explicit Roles プラグインが有効になっている場合にのみ表示されます。スキーマに SNC 内部ロールが必要な場合はオン、スキーマに SNC 内部ロールが必要ない場合はオフにします。
      ACL 承認が必要 スキーマに ACL 承認が必要が必要な場合はオン、スキーマに ACL 承認が必要ない場合はオフにします。
      ACL [ACL 承認が必要] がオンになっている場合にのみ表示されます。[GraphQL] タイプの ACL に対する受信クエリをチェックします。
      注:
      API は、スキーマへのアクセス権がないユーザーや、アクセスに認証が必要な場合に認証されていないユーザーに対して、明確なエラーメッセージを返します。
    5. フォームを保存します。
    6. オプション: リゾルバースクリプトを作成して、コンポーネントが特定のフィールドをクエリしたときにスキーマが返す値を定義します。
      フィールドのリゾルバーを定義しない場合、クエリは親オブジェクトタイプから一致するフィールド値を返します。たとえば、スキーマに [作業メモ] フィールドを含むインシデントオブジェクトタイプがあるとします。インシデントオブジェクトタイプには、インシデントテーブルから GlideRecord にマッピングするリゾルバーがあります。[作業メモ] フィールドのリゾルバーマッピングを作成しない場合は、親オブジェクトのデータソース (インシデントテーブルの GlideRecord) で [作業メモ] フィールドが検索され、関連付けられた値が割り当てられます。
      1. [GraphQL スクリプト化リゾルバー] タブを選択し、[新規] をクリックします。
      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. [送信] をクリックします。
    7. オプション: スキーマのタイプリゾルバーを定義して、インターフェイスとユニオンを具象タイプに解決します。
      1. [GraphQL スクリプト化済みタイプリゾルバー (GraphQL Scripted Typeresolvers)] タブを選択し、[新規] をクリックします。
      2. フォームに入力します。
        フィールド 説明
        スキーマ 読み取り専用スキーマ名前空間。
        タイプ スキーマで定義されているインターフェイスまたは共用タイプ。
        アプリケーション スキーマが含まれている読み取り専用アプリケーション。
        スクリプト 共用タイプとインターフェイスタイプに対して返される値を定義します。グローバル env オブジェクトで使用できる関数。
        • getArguments():前のフィールドの引数を返します。
        • getObject():親オブジェクトを返します。
        • getTypeName():インターフェイスまたは共用タイプの名前を返します。

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

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