GraphQL 명령에 대해 알아야 할 사항

8004 단어 graphql
GraphQL 명령은 GraphQL 규범의 매우 강력한 부분이지만, 이를 의식하지 못하거나 사용할 기회가 있었을 수도 있습니다.이것은 어느 정도에 GraphQL 규범은 두 개의 API가 규범에 부합되는'필수'지령만 정의했기 때문이다. 설령 이렇다 하더라도 이것은 당신이 자주 만나는 지령이 아니기 때문이다.그러나GraphQL 명령은GraphQL API와 서버에 대한 확장성을 제공하여 특히 StepZen 등 도구에 매우 중요하다.본고에서 GraphQL 지령이 무엇인지, 그들이 어떻게 사용되는지, 그리고 사용 중인 지령의 예시를 이해할 것이다.

GraphQL 명령어
기본적인 측면에서 GraphQL 지령은 GraphQL 모델에 대해 주석을 달아야 하는 방법으로 주석이 달린 항목에 대해 서로 다른 평가를 해야 한다는 것을 지시한다.네, 이것은 모호합니다. 일부 원인은 지령이 여러 가지 다른 일을 할 수 있기 때문입니다. 이것은 그들의 응용 위치에 달려 있습니다. (잠시 후에 우리는 그 중의 일부 가능성을 더욱 연구할 것입니다.)그것들의 앞면에는 항상 @ 기호가 달려 있기 때문에 식별하기 쉽다.

명령 유형
명령이 적용되는 위치에 따라 다음 두 가지 유형의 명령이 있습니다.

  • 모드 명령 - 모드 명령은 SDL(모드 정의 언어)의 모드에 적용되기 때문에 모드를 만들 때 실행됩니다.예를 들어 StepZen의 모든 사용자 정의 명령은 모드에 적용되고 StepZen이 API를 생성하는 방법을 알려주기 때문에 이런 종류에 속한다.규범은 Type System Directive locations에서 이 기능을 적용할 수 있는 위치를 정의했다.

  • 조작 명령 - 이 명령들은 조회에 적용되기 때문에 해석 프로그램이 이 조회를 처리하는 방식에 영향을 줄 수 있다.규범은 Executable Type Directive locations에서 이러한 기능을 적용할 수 있는 위치를 정의했다.
  • 이 두 유형 간의 차이를 더욱 잘 이해하기 위해'필수'지령defined in the spec을 살펴보자.

    필요한 명령
    기술적으로 규범에 맞는 서버를 만드는 데는 세 가지'필수'명령이 있다.나는 인용부호에 Required를 붙인다. 왜냐하면 그것을 실현하지 못하는GraphQL API 서버를 만들 수 있지만, 기술적으로 규범에 완전히 부합되지 않기 때문이다. (만약 이것이 중요하다면.)
  • @include - 필드, 세션 확장, 내연 세션을 포함하여 쿼리에 추가할 수 있는 조작 형식 명령입니다.
  • @skip - 위와 유사하게 매개 변수가true일 경우 이 동작 형식 명령을 검색에 추가하여 이 필드, 세션 확장 또는 내연 세션을 건너뛸 수 있습니다.
  • @depracated - 모드의 필드 또는 열거 값이 비활성화되었음을 나타내고 비활성화된 이유를 제공하는 모드 유형 명령입니다.
  • @include@skip는 모두 GraphQL 서버에 전달된 조회에 포함될 수 있으며, 주어진 파라미터에 기반한 조회의 일부분을 건너뛰거나 포함함으로써 조회의 처리 방식에 영향을 미칠 수 있다.단, @deprecated는 패턴 정의에만 추가할 수 있습니다.

    당신은 왜 지령에 관심을 가져야 합니까?
    모든 필요한 지령은 그것이 왜 중요한지 진정으로 설명할 수 없다.GraphQL API의 소비자로서 아직 명령을 받지 못했을 수도 있습니다.지령에 대해 알아야 할 관건은 본질적으로GraphQL 규범을 확장하는 방법을 제공하여 규범에 정의되지 않은 새로운 기능을 추가하는 것이다. 어떤 기능입니까?거의 다 괜찮아요.
    레오나르도 로소비츠가 그의 우수한 문장GraphQL directives are underrated에서 말한 바와 같다.

    Directives are a playground for both GraphQL server implementers and end users alike. GraphQL server implementers can develop features not currently supported by the spec, and users can develop features not yet implemented by the GraphQL server.

    Directives’ unregulated nature is a feature, not a bug.


    우리 지령의 일부 용법을 탐구하여 이것이 실제 조작에서 무엇을 의미하는지 봅시다.

    예.@computed 명령은 패턴 유형 명령의 지역 사회 예시로 패턴에서 다른 필드의 값을 계산할 수 있는 값을 만드는 데 도움을 줄 수 있다.흔히 볼 수 있는 예는 이름이 붙은 값으로 구성된 전체 이름 필드를 제공하는 것이다.
    type User {
      firstName: String
      lastName: String
      fullName: String @computed(value: "$firstName $lastName")
    }
    
    이 예에서 해석기는 fullName 필드를 처리할 필요가 없습니다. @computed 명령이 이 필드를 처리하기 때문입니다.
    Stepzen은 주로 GraphQL 명령을 사용하여 시스템이 배치된 전체 모드와 해상도를 어떻게 만드는지 알려 줍니다.따라서 StepZen의 사용자 지정 명령도 모두 모드 유형 명령입니다.
    예를 들어, 질의를 StepZen의 모드에서 REST 끝점에 연결하려는 경우
    type Query {
      getArticles(username: String!): [Article]
        @rest(
          endpoint: "https://dev.to/api/articles?username=$username"
        )
    }
    
    이 예에서 @rest 는 검색에 사용할 수 있는 사용자 정의 명령입니다.위의 예시에서, 우리는 명령 ((endpoint) 을 위한 매개 변수만 제공했다.StepZen은 이 명령을 사용하여 제공된 REST 엔드포인트의 데이터에 연결하기 위해 쿼리getArticles를 처리하는 분석 프로그램을 사용합니다.StepZen에는 데이터베이스 백엔드를 연결하는 데 사용되는 유사한 명령어@dbquery가 있습니다.그리고community implementations of a similar @rest directive.

    To learn more about how to connect a REST API to StepZen, check out my post "Turning a REST API into GraphQL Using StepZen."



    이제 어떡하지?
    GraphQL 초보자라면 지령을 보면 당황스러울 수 있습니다. 특히 지령을 자주 만나지 않기 때문입니다.그것들이 무엇인지, 어떻게 사용하는지 대충 알 수 있기를 바란다.보시다시피, 그것들은 매우 강력할 수 있지만, 검색에서 지원하는 시스템을 만나거나, StepZen 같은 도구를 사용하든, 코드를 수동으로 작성하든, GraphQL API를 실현하고 있지 않으면 사용할 기회가 없을 수도 있습니다.
    지령에 대한 정보를 더 알고 싶다면, 여기에 유용한 자원이 있습니다.
  • GraphQL Directives official spec
  • GraphQL.org - Learn Directives

  • GraphQL directives are underrated 레오나르도 로소비즈

  • GraphQL directives documentation 아폴로 서버

  • Schema directives documentation GraphQL 도구
  • 에서

    좋은 웹페이지 즐겨찾기