GraphQL 학습-Schema와 유형

4424 단어
  • 학습GraphQL 유형 시스템
  • 유형 시스템은 조회할 수 있는 데이터를 어떻게 설명하는가
  • 유형 시스템(Type System)

  • Schema의 의미
  • 필요한 데이터에 대한 정확한 설명
  • 어떤 필드를 선택할 수 있습니까
  • 서버는 그런 대상을 되돌려줍니다
  • 이들 객체 아래에 사용할 수 있는 필드는 무엇입니까
  • 모든GraphQL 서비스는 서비스에서 조회할 수 있는 데이터를 설명하기 위해 유형을 정의한다
  • 유형 언어(Type Language)

  • GraphQL 서비스, 특정 언어의 문법 문법에 의존하지 않고 GraphQL schema와 소통
  • GraphQL schema language는GraphQL의 검색 언어와 유사하여GraphQL schema와 소통
  • 객체 유형 및 필드(Object Types and Fields)

  • GraphQL schema 기본 구성 요소는 객체 유형입니다.
  • 서비스에서 얻을 수 있는 객체 유형
  • 객체의 필드는 무엇입니까?
  • type Character {
      name: String!
      appearsIn: [Episode]!
    }
    

    상술한 schema에 대해 성명을 진행하다
  • Character는 GraphQL 객체 유형
  • 이다
  • name, appearsIn은Character의 필드로Character 유형을 조작하는GraphQL 조회에서 스마트한name, appearsIn 필드
  • 가 나타난다
  • String은 기본 제공되는 스칼라 유형 중 하나이며, 스칼라 유형은 단일 스칼라 객체로 처리되는 유형이므로 질의에서 보조 선택을 할 수 없습니다
  • !필드가 비어 있지 않음을 표시합니다.GraphQL 서비스는 이 필드를 조회하면 항상 값을 되돌려줍니다
  • [Episode]!Episode수조를 나타내는데 비어 있지 않다.

  • 매개변수(Arguments)

  • GraphQL 객체 유형에 필드마다 매개 변수
  • 가 있음
  • 모든 매개 변수는 구명이고 모든 매개 변수는 구명으로 전달해야 한다
  • 매개 변수는 필수 옵션일 수 있음
  • 매개 변수를 선택할 수 있으면 기본값을 정의할 수 있음
  • type Starship {
      id: ID!
      name: String!
      length(unit: LengthUnit = METER): Float
    }
    

    질의 및 변경 유형(The Query and Mutation Types)

  • 특수 유형: query,mutation
  • 모든 GraphQL 조회의 입구를 정의했다
  • 스칼라 유형

  • Int: 32비트 정수
  • 기호 있음
  • Float: 부호가 있는 더블 정밀도 부동점수
  • String: UTF-8 문자 시퀀스
  • Boolean:true/false
  • ID: 고유한 표시자를 나타냅니다.
  • 스칼라 유형 사용자 정의

    scalar Date
    
  • 그 서열화, 반서열화, 검증 정의
  • 열거 유형(Enumeration Types)

  • 매거(enum), 특수한 표량으로 하나의 특수한 선택 가능한 집합에 제한
  • 이 유형의 모든 파라미터가 선택할 수 있는 값이라는 것을 검증할 수 있다
  • 유형 시스템과 소통하고 한 필드는 항상 유한한 집합의 값 중 하나
  • enum Episode {
      NEWHOPE
      EMPIRE
      JEDI
    }
    
  • 이상, Episode가 뒤의 세 값 중 하나를 되돌려준다는 뜻
  • 목록 및 비어 있지 않음(Lists and Non-Null)

  • 사용자 정의 유형만 가능: 객체 유형, 스칼라, 열거
  • 상기 유형에 유형 수식자를 추가하여 이 값에 영향을 미칠 수 있음
  • type Character{
      name: String!
      appearsIn: [Episode]!
    }
    
  • 비공식과 목록 형식 수식자의 조합 사용
  • myField: [String!], 빈 문자열이 아닌 그룹을 나타낸다. 그룹은 비울 수 있지만 항목마다 비울 수 없음
  • myField: [String]!, 수조는 비울 수 있고, 수조는 항목마다 비울 수 없음
  • 수요에 따라 임의의 층의 비공식, 목록 수식자
  • 를 삽입할 수 있다.

    인터페이스(Interfaces)

  • 하나의 인터페이스는 추상적인 유형으로 일부 필드를 포함하고 대상 유형은 반드시 이 필드를 포함해야 이 인터페이스를 실현할 수 있다
  • interface Character {
      id: ID!
      name: String!
      friends: [Character]
      appearsIn: [Episode]!
    }
    
  • 이상 인터페이스는Character를 실현하는 유형이 이 필드를 가지고 대응하는 매개 변수와 되돌아오는 유형이 있어야 한다는 것을 의미한다
  • 공동 유형(Union Types)

  • 유사 인터페이스, 유형 간의 공통 필드를 지정하지 않음
  • union SearchResult = Human | Droid | Starship
    
  • 상술한 바와 같이SearchResult 유형으로 되돌아오는 곳이라면 Human/Droid/Starship을 받을 수 있다.
  • 연합 유형 구성원은 반드시 구체적인 대상 유형이어야 하며, 인터페이스나 다른 연합 유형을 사용하여 하나의 연합 유형을 창조할 수 없다
  • //  
    {
      search(text: "an") {
        ... on Human {
          name
          height
        }
        ... on Droid {
          name
          primaryFunction
        }
        ... on Starship {
          name
          length
        }
      }
    }
    
    //  
    {
      "data": {
        "search": [
          {
            "name": "Han Solo",
            "height": 1.8
          },
          {
            "name": "Leia Organa",
            "height": 1.5
          },
          {
            "name": "TIE Advanced x1",
            "length": 9.2
          }
        ]
      }
    }
    

    유형 입력(Input Types)

  • 변경에 사용하면 매우 유용하다. 예를 들어 하나의 대상을 새 대상으로 전달해야 한다.
  • 키워드 input
  • input ReviewInput {
      stars: Int!
      commentary: String
    }
    
  • 사용하면
  • #  
    mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
      createReview(episode: $ep, review: $review) {
        stars
        commentary
      }
    }
    {
      "ep": "JEDI",
      "review": {
        "stars": 5,
        "commentary": "This is a great movie!"
      }
    }
    {
      "data": {
        "createReview": {
          "stars": 5,
          "commentary": "This is a great movie!"
        }
      }
    }
    

    좋은 웹페이지 즐겨찾기