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
orfalse
(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에 따라 적합한 정보를 전송을 해준다.
참고자료
https://www.apollographql.com/blog/graphql-vs-rest-5d425123e34b/
https://www.holaxprogramming.com/2018/01/20/graphql-vs-restful-api/
Leave a comment