GraphQL 스키마 생성

  • 릴리스 버전: Zurich
  • 업데이트 날짜 2025년 07월 31일
  • 소요 시간: 6분
  • GraphQL 쿼리에 데이터를 사용할 수 있도록 GraphQL 스키마를 생성합니다.

    시작하기 전에

    필요한 역할: graphql_schema_admin 또는 admin

    프로시저

    1. 다음으로 이동 모두 > 시스템 웹 서비스 > GraphQL > GraphQL API.
    2. 새로 만들기를 선택합니다.
    3. 다음 필드를 완성합니다.
      필드 설명
      이름 스키마의 이름입니다.
      스키마 네임스페이스 애플리케이션 이름 내에서 고유해야 합니다.
      애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
      애플리케이션 네임스페이스 읽기 전용입니다. 이름이 같은 스키마와의 충돌을 방지하기 위해 Schema 네임스페이스 와 함께 작동합니다.
      활성 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
      }
    4. 보안 섹션의 필드에 내용을 입력합니다.
      필드 설명
      인증 필요 스키마에 액세스하기 위해 인증을 요구하려면 이 옵션을 선택합니다. 이 옵션의 선택을 취소하면 스키마를 공개적으로 사용할 수 있습니다.
      ACL 권한 필요 전체 API의 ACL 인증을 요구하려면 이 옵션을 선택합니다. ACL 필드에서 GraphQL 유형의 ACL을 선택합니다.

      특정 경로에 대해서만 ACL 권한 부여를 사용하려면 이 옵션을 선택 취소한 상태로 두고 경로 ACL 깊이 필드에서 ACL을 평가할 수준을 지정합니다.

      SNC 내부 필요 스키마에 SNC 내부 역할이 필요한 경우 이 옵션을 선택합니다. 이 옵션은 Explicit Roles 플러그인(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. 옵션: 해결자 스크립트를 생성하여 구성요소가 필드를 쿼리할 때 스키마가 반환하는 값을 정의합니다.
      필드에 대한 해석기를 정의하지 않으면 쿼리는 상위 객체 유형에서 일치하는 필드 값을 반환합니다. 예를 들어 스키마에 작업 메모 필드가 있는 Incident 객체 유형이 있다고 가정합니다. 인시던트 객체 유형에는 인시던트 테이블에서 GlideRecord로 매핑되는 해결자가 있습니다. 작업 메모 필드에 대한 해석기 매핑을 생성하지 않으면 시스템은 상위 객체의 데이터 소스(인시던트 테이블의 GlideRecord)에서 작업 메모 필드를 검색하고 관련 값을 할당합니다.
      1. GraphQL Scripted Resolvers(GraphQL 스크립팅된 해결 프로그램) 탭을 선택하고 New(새로 만들기)를 선택합니다.
      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 스크립팅된 유형 해결자 탭을 선택하고 새로 만들기를 선택합니다.
      2. 양식을 작성합니다.
        필드 설명
        스키마 읽기 전용 스키마 네임스페이스입니다.
        유형 스키마에 정의된 인터페이스 또는 공용 구조체 형식입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스크립트 공용 구조체 및 인터페이스 형식에 대해 반환되는 값을 정의합니다. 전역 env 객체에서 사용할 수 있는 기능:
        • getArguments(): 이전 필드의 인수를 반환합니다.
        • getObject(): 상위 객체를 반환합니다.
        • getTypeName(): 인터페이스 또는 공용 구조체 유형의 이름을 반환합니다.

        이 스크립트는 GlideRecord에 액세스할 수 있습니다.

      3. 제출을 선택합니다.
    8. 옵션: 해결자 및 유형 해결자 기록을 스키마의 필드에 매핑합니다.
      이 매핑은 구성요소가 필드를 쿼리할 때 반환하는 값을 시스템에 알려줍니다.
      1. GraphQL 스크립팅된 해결 프로그램 매핑 탭을 선택하고 새로 만들기를 선택합니다.
      2. 양식을 작성합니다.
        필드 설명
        경로 매핑하려는 스키마의 필드 경로입니다.
        해결 프로그램 필드에서 반환하는 데이터를 정의하는 데 사용할 해결자입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스키마 읽기 전용 스키마 네임스페이스입니다.
      3. 제출을 선택합니다.