개발 이야기/Front-end

GraphQL 기본 #2

sonoa 2023. 3. 17. 09:57
반응형

Mutation 뮤테이션

    • REST에서 모든 요청은 결국 서버에 일부 부작용을 일으킬 수 있지만 규칙에 따라 GET데이터 수정 요청을 사용하지 않는 것이 좋다. GraphQL도 유사하다. 기술적으로 모든 쿼리를 구현하여 데이터 쓰기를 유발할 수 있다. 그러나 쓰기를 유발하는 모든 작업은 돌연변이를 통해 명시적으로 보내야 한다는 규칙을 설정하는 것이 유용하다.
    • 쿼리와 마찬가지로 변형 필드가 객체 유형을 반환하면 중첩 필드를 요청할 수 있다. 이것은 업데이트 후 개체의 새 상태를 가져오는 데 유용할 수 있다.Apollo garphql studio
    • 좀 더 편리한 기능들을 줌.
    • schema query 등
      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!"
        }
      }
      }
    • Multiple fields in mutations 뮤테이션의 여러 필드
    • 돌연변이는 쿼리와 마찬가지로 여러 필드를 포함할 수 있다. 쿼리와 변형 사이에는 이름 외에 한 가지 중요한 차이점이 있다.
    • 쿼리 필드가 병렬로 실행되는 동안 돌연변이 필드는 차례로 차례로 실행된다.
    • 왜? 데이터이기 때문에,수정, 삭제 등을 같이하면서 에러가 발생할 수 있기 때문에.
    • 즉, 한 요청에서 두 개의 돌연변이를 보내는 경우 incrementCredits첫 번째는 두 번째가 시작되기 전에 완료되도록 보장되어 우리 자신과의 경쟁 조건으로 끝나지 않도록 한다.Inline Fragments
    • 인터페이스나 유니언 타입을 반환하는 필드의 경우,
    • 인라인 프래그먼트를 통해 데이터를 타입에 맞춰 받을 수 있음
    • ... on [타입] { ...
    • }Meta fields
    • __typename
    • GraphQL을 사용하면 쿼리의 어느 지점에서나 메타 필드인 typename 을 요청하여 그 시점에서 객체 타입의 이름을 얻을 수 있다.
    • typename 필드가 없으면 클라이언트가 다른 타입을 구별하는 것은 불가능할 것이다.Introspection
    • GraphQL 서비스는 몇 가지 메타 필드를 제공하며, 나머지는 Introspection 시스템을 노출하는 데 사용된다.Apollo
      type Character {
      name: String!
      appearsIn: [Episode]!
      }
       

스키마 & 타입

https://graphql.org/learn/schema/ >> https://graphql-kr.github.io/learn/schema/
객체 타입과 필드

GraphQL 스키마의 가장 기본적인 구성 요소는 객체 타입입니다.
객체 타입은 서비스에서 가져올 수 있는 객체의 종류와 그 객체의 필드를 나타냅니다.
GraphQL 스키마 언어에서는 다음과 같이 표현할 수 있습니다

    • CharacterGraphQL 객체 타입 입니다. 즉, 필드가 있는 타입입니다.
    • 스키마의 대부분의 타입은 객체 타입입니다.
    • nameappearInCharacter 타입의 필드 입니다.
    • 즉 name 과 appearIn 은 GraphQL 쿼리의 Character 타입 어디서든 사용할 수 있는 필드입니다.
    • String 은 내장된 스칼라 타입 중 하나입니다.
    • 이는 스칼라 객체로 해석되는 타입이며 쿼리에서 하위 선택을 할 수 없습니다.
    • 스칼라 타입은 나중에 자세히 다룰 것입니다.
    • String! 은 필드가 non-nullable 임을 의미합니다.
    • 즉, 이 필드를 쿼리할 때 GraphQL 서비스가 항상 값을 반환한다는 것을 의미합니다.
    • 타입 언어에서는 이것을 느낌표로 나타냅니다.
    • [Episode]! 는 Episode 객체의 배열(array) 을 나타냅니다.
    • 또한 non-nullable 이기 때문에 appearIn 필드를 쿼리할 때 항상(0개 이상의 아이템을 가진) 배열을 기대할 수 있습니다.

인자  :

GraphQL 객체 타입의 모든 필드는 0개 이상의 인수를 가질 수 있습니다

GraphQL 기본  
쿼리 요청, 결과 동일 / 주석 / 작업(타입/이름)
쿼리 필드 객체 참조(다중콜X) / 인자 / 별칭
Fragment 반복되는 필드셋 / 변수 전달가능
변수 / 지시어 동적쿼리 방법 / @include @skip
뮤테이션 데이터의 수정을 가하는 방법
Apollo graphQL 다양한 기능이 추가된 라이브러리
뮤테이션 다중 필드 순차 실행 (쿼리는 병렬)
인라인 프래그먼트 interface / union 일때 사용
타입 시스템 객체 타입과 필드
특별한 타입 쿼리 타입 / 뮤테이션 타입
스칼라 타입 구체적 데이터
기타 인터페이스 / 유니온 / 인풋

 

반응형

'개발 이야기 > Front-end' 카테고리의 다른 글

React 라이브러리  (0) 2023.03.20
React 공식문서로 디테일 잡기 #5  (0) 2023.03.19
GraphQL 기본  (0) 2023.03.16
React 공식문서로 디테일 잡기 #4  (2) 2023.03.15
React 공식문서로 디테일 잡기 #3  (2) 2023.03.14