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 Scripted Schemas 양식의 GraphQL Scripted Resolvers 관련 목록에서 각 필드에 대한 해결자를 정의할 수 있습니다.
- 유형 해결자
- 인터페이스와 유니온을 구체적인 GraphQL 유형으로 해석합니다. 예를 들어,
인시던트 유형과문제유형 간의 합집합을 정의할 수 있습니다. typeresolver 스크립트를 사용하여 반환할 시기를 정의합니다. GraphQL Scripted Schemas 양식의 GraphQL Scripted Typeresolvers 관련 목록에서 typeresolver를 정의할 수 있습니다. - 해결자 매핑
- 해석기를 스키마의 필드에 매핑합니다. 확인자 매핑은 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
}
}
}
}지시문 및 전역 함수
@source스키마 지시문GraphQL 필드를 상위 객체의 속성 값에 매핑합니다. 필드에 별도의 해결자 스크립트가 있는 경우 시스템은 상위 객체 대신 확인되는 기록을 사용합니다.
스키마 스크립트에
@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 Framework Demo Application 플러그인(com.glide.graphql.framework.demo)을 활성화합니다.