GraphQL API 프레임워크를 사용하여 기록 데이터 쿼리
사용자 지정 GraphQL API를 생성하여 구성요소 또는 외부 공급업체 시스템의 기록 데이터를 쿼리합니다.
예를 들어 SLA와 연결된 케이스를 표시하는 구성요소를 만들 수 있습니다. 를 넥스트 경험 UI 프레임워크 사용하여 필요한 구성요소를 개발하고 케이스 테이블에 데이터를 정의하는 GraphQL 스키마를 생성하여 플랫폼에서 케이스 데이터에 액세스할 수 있습니다.
구성 요소 개발에 대한 자세한 내용은 작업 공간용 구성 요소 개발을 참조하십시오.
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 스크립팅된 유형 해결 프로그램 관련 목록에서 유형 해결 프로그램을 정의할 수 있습니다. - 해결자 매핑
- 스키마 필드에 해결자를 매핑합니다. GraphQL 스크립트된 스키마 양식의 GraphQL 스크립팅된 해결 프로그램 매핑 관련 목록에서 확인자 매핑을 정의할 수 있습니다.
GraphQL 쿼리 언어에 대한 자세한 내용은 GraphQL 웹 사이트를 참조하세요.
GraphQL API에 대한 쿼리를 테스트하려면 통합 GraphQL 테스트 도구인 GraphQL 탐색기를 사용할 수 있습니다. 자세한 내용은 GraphQL 탐색기를 사용하여 GraphQL API 테스트 문서를 참조하십시오.
제한
다음 GraphQL 기능은 지원되지 않습니다.
- 구독 운영
- 사용자 지정 스칼라 형식
내성
기본적으로 사용자 지정 스키마에 대한 내성적 쿼리는 사용할 수 없습니다. 인트로스펙션을 켜려면 문서를 참조하십시오 GraphQL 스키마에 대한 내성적 쿼리 사용.
네임스페이스
GraphQL API에는 두 개의 서로 다른 네임스페이스가 있습니다.
- 애플리케이션 네임스페이스
- 사용자 지정 애플리케이션의 네임스페이스입니다. 애플리케이션 네임스페이스에 대한 자세한 내용은 애플리케이션 범위를 참조하세요.
- 스키마 네임스페이스
- 모든 쿼리가 고유하도록 하기 위한 스키마의 네임스페이스입니다. 단일 애플리케이션에 여러 스키마 네임스페이스를 가질 수 있습니다.
데이터를 쿼리할 때 쿼리에 두 네임스페이스를 모두 포함해야 합니다. 예를 들어 다음 쿼리는 다음과 같은 네임스페이스를 사용하여 데이터를 검색합니다.
- 애플리케이션 네임스페이스:
x_graph_scope - 스키마 네임스페이스:
planet
query {
x_graph_scope {
planet {
findAll {
name
mass
distance
}
}
}
}지시문 및 전역 함수
@source스키마 지시문GraphQL 필드를 부모 객체의 속성 값에 매핑합니다. 필드에 별도의 확인자 스크립트가 있는 경우, 시스템은 상위 객체 대신 확인되는 기록을 사용합니다.
스키마 스크립트에서
@source지시문을 사용합니다.@deferquery 지시문- 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)을 활성화하십시오.