GraphQL 스키마 생성

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 01일
  • 읽기5분
  • GraphQL 쿼리에 데이터를 사용할 수 있도록 GraphQL 스키마를 생성합니다.

    시작하기 전에

    필요한 역할: graphql_schema_admin 또는 admin

    프로시저

    1. 다음으로 이동 모두 > 시스템 웹 서비스 > GraphQL > GraphQL API.
    2. 새로 만들기를 클릭합니다.
    3. 다음 필드를 완성합니다.
      필드 설명
      이름 스키마의 이름입니다.
      스키마 네임스페이스 애플리케이션 이름 내에서 고유해야 합니다.
      애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
      애플리케이션 네임스페이스 읽기 전용입니다. Schema 네임스페이스와 함께 작업하여 이름이 같은 스키마와의 충돌을 방지합니다.
      활성 활성 상태인 경우 선택되고, 활성화되지 않은 경우 선택되지 않습니다.
      스키마 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. 보안 탭을 선택하고 양식을 작성합니다.
      필드 설명
      인증 필요 스키마에 인증이 필요한 경우 선택되고, 스키마에 인증이 필요하지 않고 공개적으로 사용할 수 있는 경우 선택되지 않습니다.
      SNC 내부 필요 Explicit Roles 플러그인 이 활성화된 경우에만 나타납니다. 스키마에 SNC 내부 역할이 필요한 경우 선택되고, 스키마에 SNC 내부 역할이 필요하지 않은 경우 선택 취소됩니다.
      ACL 권한 필요 스키마에 ACL 인증이 필요한 경우 선택되고, 스키마에 ACL 인증이 필요하지 않은 경우 선택 취소됩니다.
      ACL ACL 권한 필요를 선택한 경우에만 나타납니다. GraphQL 유형의 ACL에 대해 수신 쿼리를 검사합니다.
      주:
      API는 스키마에 대한 액세스 권한이 없거나 API에 액세스하기 위해 인증이 필요할 때 인증되지 않은 사용자에게 명확한 오류 메시지를 반환합니다.
    5. 양식을 저장합니다.
    6. 옵션: 구성요소가 특정 필드를 쿼리할 때 스키마가 반환하는 값을 정의하는 해석기 스크립트를 생성합니다.
      필드에 대한 해석기를 정의하지 않으면 쿼리는 상위 객체 유형에서 일치하는 필드 값을 반환합니다. 예를 들어 스키마에 작업 메모 필드가 있는 인시던트 객체 유형이 있다고 가정합니다. 인시던트 객체 유형에는 인시던트 테이블의 GlideRecord에 매핑되는 해결 프로그램이 있습니다. 작업 메모 필드에 대한 해결자 매핑을 생성하지 않으면 시스템은 인시던트 테이블의 GlideRecord인 상위 객체의 데이터 소스에서 작업 메모 필드를 검색하고 관련 값을 할당합니다.
      1. GraphQL Scripted Resolvers(GraphQL 스크립트 해결기) 탭을 선택하고 New(새로 만들기)를 클릭합니다.
      2. 양식을 작성합니다.
        필드 설명
        이름 해결 프로그램의 이름입니다.
        스키마 읽기 전용 스키마 네임스페이스입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스크립트 필드를 쿼리할 때 반환되는 값을 정의합니다. 전역 env 객체에서 사용할 수 있는 함수:
        • getArguments(): 이전 필드의 인수를 반환합니다.
        • getSource(): 부모 객체를 반환합니다.

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

        이 예에서는 연결된 필드를 쿼리할 때 User 테이블의 레코드를 반환합니다.

        (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. 옵션: 스키마에 대한 typeresolver를 정의하여 인터페이스와 공용 구조체를 구체적인 유형으로 확인합니다.
      1. GraphQL Scripted Typeresolvers(GraphQL 스크립트 유형 해석기) 탭을 선택하고 New(새로 만들기)를 클릭합니다.
      2. 양식을 작성합니다.
        필드 설명
        스키마 읽기 전용 스키마 네임스페이스입니다.
        유형 스키마에 정의된 인터페이스 또는 공용 구조체 형식입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스크립트 공용 구조체 및 인터페이스 형식에 대해 반환되는 값을 정의합니다. 전역 env 객체에서 사용할 수 있는 함수:
        • getArguments(): 이전 필드의 인수를 반환합니다.
        • getObject(): 부모 객체를 반환합니다.
        • getTypeName(): 인터페이스 또는 공용 구조체 유형의 이름을 반환합니다.

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

      3. 제출을 클릭합니다.
    8. 옵션: resolver 및 typeresolver 레코드를 스키마의 필드에 매핑합니다. 이 매핑을 통해 시스템은 구성요소가 특정 필드를 쿼리할 때 반환할 값을 알 수 있습니다.
      1. GraphQL Scripted Resolver Mappings(GraphQL 스크립팅된 해석기 매핑) 탭을 선택하고 New(새로 만들기)를 클릭합니다.
      2. 양식을 작성합니다.
        필드 설명
        경로 매핑할 스키마의 필드 경로입니다.
        해결 프로그램 필드에서 반환되는 데이터를 정의하는 데 사용할 해결 프로그램입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스키마 읽기 전용 스키마 네임스페이스입니다.
      3. 제출을 클릭합니다.