> 웹 프론트엔드 > CSS 튜토리얼 > 내장 GraphQL 지시문으로 작업합니다

내장 GraphQL 지시문으로 작업합니다

William Shakespeare
풀어 주다: 2025-03-19 10:35:11
원래의
792명이 탐색했습니다.

내장 GraphQL 지시문으로 작업합니다

지시문은 GraphQL의 최고이며 가장 무언의 기능 중 하나입니다.

모든 GraphQL Spec Compliant API가 구현 해야하는 GraphQL의 내장 스키마 및 작동 지시문으로 작업을 살펴 ​​보겠습니다. 사용자가 상호 작용하는 것에 따라 응답 페이로드를 줄이려는 컨트롤이 있기 때문에 동적 프론트 엔드로 작업하는 경우 매우 유용합니다.

지침 개요

테이블에 표시된 열을 사용자 정의 할 수있는 옵션이있는 응용 프로그램을 상상해 봅시다. 두세 개의 열을 숨기면 해당 셀의 데이터를 가져올 필요가 없습니다. 그러나 GraphQL 지시문을 사용하면 해당 필드를 포함하거나 건너 뛰도록 선택할 수 있습니다.

GraphQL 사양은 지시문이 무엇인지, 어디에서 사용될 수 있는지 정의합니다. 구체적으로, 소비자 운영 (예 : 쿼리) 및 기본 스키마 자체에서 지시문을 사용할 수 있습니다. 또는 간단히 말하면 지시문은 스키마 또는 작동을 기반으로합니다. 스키마 지침은 스키마가 생성 될 때 사용되며 쿼리가 실행될 때 작동 지시문이 실행됩니다.

요컨대, 지시문은 메타 데이터, 런타임 힌트, 런타임 구문 분석 (특정 형식의 반환 날짜와 같은) 및 확장 된 설명 (와 같은)의 목적으로 사용될 수 있습니다.

4 가지 종류의 지시문

GraphQL은 사양 작업 드래프트에 정의 된 4 가지 주요 지침을 자랑하며 그 중 하나는 작업 초안으로 발표되지 않았습니다.

  • @포함하다
  • @건너뛰다
  • @deprecated
  • @specifiedby (작업 초안)

GraphQL을 면밀히 팔로우하는 경우, 오늘 시도 할 수있는 JavaScript 구현에 2 개의 추가 지시문이 병합 된 것을 알 수 있습니다. @stream 및 @defer. 커뮤니티는 실제 응용 프로그램에서 테스트하는 동안 공식 사양의 일부는 아닙니다.

@포함하다

@include 지시문은 그 이름에 따라 IF 인수를 전달하여 필드를 조건부로 포함시킬 수 있습니다. 조건부이므로 쿼리에 변수를 사용하여 진실을 확인하는 것이 합리적입니다.

예를 들어, 다음 예제의 변수가 Truthy 인 경우 이름 필드가 쿼리 응답에 포함됩니다.

 Query getUsers ($ shavelame : boolean) {
  사용자 {
    ID
    name @include (if : $ shavingame)
  }
}
로그인 후 복사

반대로, 우리는 쿼리와 함께 변수 $ showname을 false로 전달하여 필드를 포함하지 않도록 선택할 수 있습니다. 또한 $ showname 변수의 기본값을 지정할 수도 있으므로 모든 요청에 ​​따라 전달할 필요가 없습니다.

 query getUsers ($ shavelame : boolean = true) {
  사용자 {
    ID
    name @include (if : $ shavingame)
  }
}
로그인 후 복사

@건너뛰다

우리는 방금 같은 종류의 것을 표현할 수 있지만 대신 @skip 지시문을 사용합니다. 가치가 진실이라면, 예상대로 해당 필드를 건너 뛸 것입니다.

 쿼리 getUsers ($ hideName : boolean) {
  사용자 {
    ID
    이름 @skip (if : $ hidename)
  }
}
로그인 후 복사

이것은 개별 분야에 적합하지만 둘 이상의 필드를 포함 시키거나 건너 뛰는 시간이 있습니다. 우리는 다음과 같은 여러 줄에 @include 및 @skip의 사용법을 복제 할 수 있습니다.

 쿼리 getUsers ($ includefields : boolean) {
  사용자 {
    ID
    이름 @include (if : $ includefields)
    이메일 @include (if : $ includefields)
    역할 @include (if : $ includefields)
  }
}
로그인 후 복사

@skip 및 @include 지시문은 모두 필드, 조각 스프레드 및 인라인 조각에 사용할 수 있습니다. 즉, 인라인 조각으로 이와 같이 다른 일을 할 수 있습니다.

 쿼리 getUsers ($ excludeFields : boolean) {
  사용자 {
    ID
    ... 사용자 @skip (if : $ excludeFields) {
      이름
      이메일
      역할
    }
  }
}
로그인 후 복사

조각이 이미 정의 된 경우 파편을 쿼리에 뿌릴 때 @skip 및 @include를 사용할 수도 있습니다.

 사용자의 조각 사용자 {
  이름
  이메일
  역할
}

쿼리 getUsers ($ excludeFields : boolean) {
  사용자 {
    ID
    ... user @skip (if : $ excludefields)
  }
}
로그인 후 복사

@deprecated

@deprecated 지시문은 스키마에만 나타나며 사용자가 위에서 본 것처럼 쿼리의 일부로 제공 할 수있는 것이 아닙니다. 대신 @DepRecated 지시문은 GraphQL API 스키마를 유지 관리하는 개발자가 지정합니다.

사용자로서 스키마에서 더 이상 사용되지 않은 필드를 가져 오려면 상황에 맞는 도움을 제공하는 경고를받습니다.

더 이상 사용되지 않은 필드를 표시하려면 SDL (Schema Definic Langu

 유형 사용자 {
  ID : ID!
  제목 : String @DepRecated (이유 : "이름을 대신 사용")
  이름 : 문자열!
  이메일 : 문자열!
  역할 : 역할
}
로그인 후 복사

이것을 @include 지시문과 짝을이면 쿼리 변수를 기반으로 감가 상각 된 필드를 조건부로 가져올 수 있습니다.

 사용자의 조각 사용자 {
  title @include (if : $ alcludePrecatedFields)
  이름
  이메일
  역할
}

Query getUsers ($ alludePrecatedFields : boolean! = false) {
  사용자 {
    ID
    ...사용자
  }
}
로그인 후 복사

@specifiedby

@specifiedby는 지시문의 네 번째이며 현재 작업 초안의 일부입니다. 사용자 정의 스칼라 구현에서 사용하도록 설정되었으며 스칼라의 사양을 가리키는 URL 인수를 가져옵니다.

예를 들어, 이메일 주소에 맞춤 스칼라를 추가하면 URL을 그 일부로 사용하는 Regex의 사양에 전달하려고합니다. 마지막 예제와 RFC #822에 정의 된 제안서를 사용하여 emailAdDress의 스칼라는 다음과 같은 스키마에서 정의됩니다.

 Scalar emailaddress @specifiedby (url : "https://www.w3.org/protocols/rfc822/")
로그인 후 복사

사용자 정의 지시문에는 다른 추가 지시문과의 충돌을 방지하기 위해 접두사 이름이있는 것이 좋습니다. Custom Directive 예제와 그것이 어떻게 생성되는지를 찾고 있다면 GraphQL Public Schema를 살펴보십시오. 공개적으로 소비 할 수있는 API를 주석을 달기위한 코드와 스키마 우선 지원을 모두 갖는 사용자 정의 그래프 QL 지시문입니다.

마무리

그래서 이것은 GraphQL 지시문에 대한 높은 수준의 모습입니다. 다시 말하지만, 나는 지시문이 다른 GraphQL 기능에 의해 어울리는 일종의 무능한 영웅이라고 생각합니다. 우리는 이미 GraphQL 스키마를 통제하는 많은 제어력을 가지고 있으며, 지시문은 쿼리에서 원하는 것을 정확하게 얻기 위해 훨씬 더 세밀한 제어를 제공합니다. 그것은 일종의 효율성이며, 그래프 QL API를 빠르고 궁극적으로 작업하기에 더 친절하게 만듭니다.

GraphQL API를 구축하는 경우 이러한 지침을 내성 쿼리에 포함시켜야합니다. 개발자에게 추가 제어의 이점을 제공 할뿐만 아니라 전반적인 개발자 경험을 제공합니다. 개발자가 코드를 떠나지 않고해야 할 일을 알 수 있도록 필드를 올바르게하는 것이 얼마나 도움이 될지 생각해보십시오. 그것은 그 자체로 강력합니다.

Unsplash에서 Isabel Gonçalves의 헤더 그래픽 제공

위 내용은 내장 GraphQL 지시문으로 작업합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿