GraphQL 스키마 생성

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기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 문서를 참조하십시오.

      주:
      ACL 필드는 전체 API에 적용되며 특정 경로에 적용되는 ACL과 독립적입니다.
      ACL 수신 쿼리를 검사할 GraphQL 형식의 ACL을 선택합니다. 선택한 ACL은 전체 API에 적용됩니다. 이 옵션은 ACL 인증 필요를 선택한 경우에만 나타납니다.
      주:
      API는 스키마에 대한 액세스 권한이 없거나 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 스크립팅된 형식 확인자 탭을 선택하고 새로 만들기를 선택합니다.
      2. 양식을 작성하십시오.
        필드 설명
        스키마 읽기 전용 스키마 네임스페이스입니다.
        유형 스키마에 정의된 인터페이스 또는 공용 구조체 형식입니다.
        애플리케이션 스키마가 속한 읽기 전용 애플리케이션입니다.
        스크립트 공용 구조체 및 인터페이스 형식에 대해 반환되는 값을 정의합니다. 전역 env 객체에서 사용할 수 있는 함수:
        • getArguments(): 이전 필드의 인수를 반환합니다.
        • getObject(): 상위 객체를 반환합니다.
        • getTypeName(): 인터페이스 또는 공용체 유형의 이름을 반환합니다.

        이 스크립트는 GlideRecord에 접근할 수 있습니다.

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