반응형
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 스키마 언어에서는 다음과 같이 표현할 수 있습니다
Character
는GraphQL
객체 타입 입니다. 즉, 필드가 있는 타입입니다.- 스키마의 대부분의 타입은 객체 타입입니다.
name
과appearIn
은Character
타입의 필드 입니다.- 즉 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 |