GraphQL - 01

페이스북에서 만든 언어로, SQL와 같이 쿼리 언어이다. SQL은 데이터베이스에서 데이터를 가져오는게 목적이었다면 GraphQL(gql)은 웹 클라이언트가 서버에서 데이터를 가져오는게 목적이다.

기본 개념

Query

데이터 조회 (Read Operation)

hero {
  name
  friends {
    name
  }
}

# Operation
query HeroNameAndFriends {
  hero {
    name
    friends {
      name
    }
  }
}

Mutation

데이터 변경 (Write Operation)

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}

# Variables
{
  "ep": "JEDI",
  "review": {
    "stars": 5,
    "commentary": "This is a great movie!"
  }
}

 

Type

 

◽ Query And Mutation types

Query와 Mutation은 예약어로 데이터를 읽고 쓰는데 활용한다.

type Query {
  books: [Book]
  authors: [Author]
}

type Mutation {
  addBook(title: String, author: String): Book
}

 

◽ Scalar types

Programing Language에서 쓰던 Primitive type들과 유사하며 custom scalar type도 정의할 수 있다.

type Person {
  id: ID
  name: String
	age: Int
  height: Float
	isMarried: Boolean
}
  • Int : signed 32-bit 정수 (ex: int)
  • Float : 배정도 부동 소수점 (ex: double)
  • String : UTF-8 문자열 (ex: String)
  • Boolean : true or false (ex: boolean)
  • ID : Serialize된 String으로 고유한 식별자

 

◽ Object types

여러 Field를 지니고 있는 형태로, Scalar 타입이나 또 다른 Object 타입을 가질 수 있다.

type Book {
  title: String
  author: Author
}

type Author {
  name: String
  book: Book
}

 

◽ List & Non-Null

type Character {
  name: String!
  appearsIn: [Episode]!
}
  • List : []
  • Non-Null : !

 

◽ Enum types

enum AllowedColor {
  RED
  GREEN
  BLUE
}

 

◽ Interfaces

추상화 타입으로 구현 시 이를 모두 포함 시켜야한다.

interface Character {
  id: ID!
  name: String!
  friends: [Character]
  appearsIn: [Episode]!
}

GraphQL vs REST API

REST API와 차이점은 endpoint라고 할 수 있다. REST API의 경우 각각 알맞은 endpoint를 제공함으로써 웹 클라이언트에게 적합한 데이터를 적합한 전략과 함께 전송을 해준다. 그에 반해 GraphQL의 경우는 하나의 endpoint로 웹클라이언트가 보낸 Query에 따라 적합한 정보를 전송을 해준다.

/assets/images/graphql/graphql_restful.png

참고자료

https://graphql.org/

https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/

https://www.holaxprogramming.com/2018/01/20/graphql-vs-restful-api/

https://tech.kakao.com/2019/08/01/graphql-basic/

Leave a comment