GraphQL API 프레임워크를 사용하여 기록 데이터 쿼리
사용자 지정 GraphQL API를 생성하여 구성요소 또는 타사 시스템의 레코드 데이터를 쿼리합니다.
예를 들어, SLA와 연결된 케이스를 표시하는 구성요소를 만들 수 있습니다. 를 Next Experience UI 프레임워크 사용하여 필요한 구성요소를 개발하고 케이스 테이블에서 데이터를 정의하는 GraphQL 스키마를 생성하여 플랫폼에서 케이스 데이터에 액세스할 수 있습니다.
구성 요소 개발에 대한 자세한 내용은 Workspace용 구성 요소 개발을 참조하십시오.
GraphQL의 이점
GraphQL은 클라이언트 측 개발에 최적화된 웹 쿼리 언어입니다. 스크립팅된 GraphQL을 사용하여 다음을 수행할 수 있습니다.
- 인트로스펙션을 통해 쿼리할 수 있는 필드와 객체를 검색합니다.
- 구성요소에서 필요한 정확한 데이터를 쿼리합니다.
- REST 요청에 대한 여러 엔드포인트와 달리 단일 API에서 가능한 여러 쿼리를 관리합니다.
- 스키마를 공개로 만들어 외부 공급업체 시스템과 통합합니다.
- 구성 요소에서 GraphQL 쿼리를 생성하고 응답을 처리합니다.
시작하기 전에 알아야 할 사항
사용자 지정 GraphQL API 생성을 시작하기 전에 다음 사항이 있는지 확인합니다.
- 스키마를 작성하기 위한 GraphQL 지식
- API 동작을 정의하는 JavaScript 지식
- 웹 구성 요소 개념에 대한 일반적인 지식.
- 기록 데이터를 사용하는 사용자 지정 작업 공간 구성요소입니다.
- 스키마에 ServiceNow 노출하려는 데이터 모델에 대한 이해입니다.
- 필드를 해석기 스크립트의 기록 데이터에 매핑하는 GlideRecord 지식입니다.
GraphQL 개요
스크립팅된 GraphQL API 생성에는 다음 부분이 포함됩니다.
- GraphQL 스키마 정의 언어(SDL)
- GraphQL 쿼리에서 사용할 수 있는 필드의 구조와 데이터 유형을 정의합니다. GraphQL 스크립팅된 스키마 [sys_graphql_schema] 테이블의 스키마 스크립트 필드를 사용하여 SDL을 정의할 수 있습니다. SDL은 쿼리 및 변형 작업만 지원합니다.
- 해결 프로그램
- 각 필드에서 반환되는 데이터를 정의합니다. GraphQL 스크립팅된 해석기 양식의 GraphQL 스크립팅된 해석기 관련 목록에서 각 필드에 대한 해석기를 정의할 수 있습니다.
- TypeResolver
- 인터페이스와 공용 구조체를 구체적인 GraphQL 형식으로 해결합니다. 예를 들어,
인시던트유형과문제유형 간의 합집합을 정의할 수 있습니다. typeresolver 스크립트를 사용하여 언제 반환할지 정의합니다. GraphQL 스크립팅된 스키마 양식의 GraphQL 스크립팅된 Typeresolvers 관련 목록에서 타입 해석기를 정의할 수 있습니다. - 해결자 매핑
- 확인자를 스키마의 필드에 매핑합니다. GraphQL 스크립팅된 스키마 양식의 GraphQL 스크립팅된 해석기 매핑 관련 목록에서 해석기 매핑을 정의할 수 있습니다.
GraphQL 쿼리 언어에 대한 자세한 내용은 GraphQL 웹 사이트를 참조하세요.
GraphQL API에 대한 쿼리를 테스트하려면 통합 GraphQL 테스트 도구인 GraphQL Explorer를 사용할 수 있습니다. 자세한 내용은 GraphQL 탐색기로 GraphQL API 테스트 문서를 참조하십시오.
제한
다음 GraphQL 기능은 지원되지 않습니다.
- 구독 운영
- 사용자 지정 스칼라 유형
내성
기본적으로 사용자 지정 스키마에 대한 내성 쿼리는 사용하도록 설정되어 있지 않습니다. 인트로스펙션을 켜려면 을 참조하십시오 GraphQL 스키마에 대한 내성 쿼리 사용.
네임스페이스
GraphQL API에는 두 가지 네임스페이스가 있습니다.
- 애플리케이션 네임스페이스
- 사용자 지정 애플리케이션의 네임스페이스입니다. 응용 프로그램 네임스페이스에 대한 자세한 내용은 응용 프로그램 범위를 참조하세요.
- 스키마 네임스페이스
- 모든 쿼리가 고유하도록 하는 스키마의 네임스페이스입니다. 단일 애플리케이션에 여러 스키마 네임스페이스가 있을 수 있습니다.
데이터를 쿼리할 때는 쿼리에 두 네임스페이스를 모두 포함해야 합니다. 예를 들어 다음 쿼리는 다음과 같은 네임스페이스가 있는 데이터를 검색합니다.
- 애플리케이션 네임스페이스:
x_graph_scope - 스키마 네임스페이스:
planet
query {
x_graph_scope {
planet {
findAll {
name
mass
distance
}
}
}
}지시문 및 전역 함수
스키마지시문 @sourceGraphQL 필드를 상위 객체의 속성 값에 매핑합니다. 필드에 별도의 해결자 스크립트가 있는 경우 시스템은 상위 객체 대신 확인되는 레코드를 사용합니다.
스키마 스크립트에서
@source지시문을 사용합니다.@defer쿼리 지시문- 쿼리의 뒷부분까지 GraphQL 조각 처리를 연기합니다. 이 쿼리 지시문을 사용하여 조각 내에서 응답이 느린 필드에 대한 데이터 반환을 지연합니다. 지연된 조각의 필드 결과를 다중 파트 응답으로 스트리밍합니다.주:
@defer지시문을 사용하려면 GraphQL 클라이언트가 multipart/mixed HTTP 헤더를 허용해야 합니다. 예를 들어 HTTP 헤더를Accept: multipart/mixed; boundary="-"로 설정합니다.@defer지시문을 사용하여 사용자의 상호작용 시간을 단축할 수 있습니다. 성능 저하를 일으킬 수 있으므로 이 쿼리 지시문을 무분별하게 적용하지 마십시오. 성능 테스트를 수행하여 성능 향상을 위해 지연할 수 있는 필드를 결정합니다. - 해결 프로그램 기능
이러한 함수는 전역 env 객체에서 사용할 수 있습니다.
- getArguments(): 이전 필드의 인수를 반환합니다.
- getSource(): 상위 객체를 반환합니다.
해석기 스크립트에 사용합니다.
- Typeresolver 함수
이러한 함수는 전역 env 객체에서 사용할 수 있습니다.
- getArguments(): 이전 필드의 인수를 반환합니다.
- getObject(): 상위 객체를 반환합니다.
- getTypeName(): 인터페이스 또는 공용체 유형의 이름을 반환합니다.
typeresolver 스크립트에 사용합니다.
데모 애플리케이션
변형 및 쿼리가 있는 데모 GraphQL PTO 달력 스키마를 보려면 GraphQL 프레임워크 데모 애플리케이션 플러그인(com.glide.graphql.framework.demo)을 활성화하십시오.