Programming/GraphQL

GraphQL의 핵심 개념

쌩우 2019. 9. 27. 18:51

Schema Definition Language

ex) 스키마 내에서 간단한 타입의 정의

// 1. Person
type Person {
    name: String!
    age: Int!
}

// 2. Post 
type Post {
    title: String!
}

관계를 추가하는 경우
=> Person은 다수의 post를 가지고, Post는 각각 Person 하나의 author를 가진다.

// 1. Person
type Person {
    name: String!
    age: Int!
    posts: [Post!]!
}

// 2. Post 
type Post {
    title: String!
    author: Person!
}

Query로 데이터 fetching하기 (GET)

GraphQL의 장점으로, 필요한 부분만 특정지어 불러올 수 있다.

ex) 모든 Person 중 마지막 2명의 name, age 불러오기

  1. 요청

    {
     allPersons(last: 2) {
         name
         age
     }
    }
    
  2. 응답

    {
     "allPersons": [
         {"name": "John", "Age": 20}
         {"name": "Alice", "Age": 20}
     ]
    }
    

ex) 모든 Person의 이름과 각각이 작성한 post의 이름 불러오기

  1. 요청

    {
     allPersons {
         name
             posts {
                 title
             }
     }
    }
    
  2. 응답

    {
     "allPersons": [
         {
             "name": "John",
             "posts": [
                 {"title": "Nice GraphQL"},
                 {"title": "Apollo is a Client for GraphQL"}
             ]            
         },
         {
             "name": "Alice",
             "posts": [
                 {"title": "How to start GraphQL"},
             ]            
         },
         {
             "name": "Sarah",
             "posts": []
         },
     ]
    }
    

Mutations로 데이터 쓰기(PUT, UPDATE, DELETE 등등)

  • creating new data
  • updating data
  • deleting data

ex) Create

1) 요청

mutation {
    createPerson(name: "Sangwoo", age: 29) {
        name
        age
    }
}

2) 응답

"createPerson": {
    "name": "Sangwoo",
    "age": 29,
}

모든 스키마

각 스키마의 형태에 대한 예시이다.
타입의 지정과 스키마 정의를 다음과 같은 예시로 알 수 있다.

스키마의 확장
다음 예시처럼 하면 된다.
정의해놓은 각 스키마에 추가할 method(?)와 해당하는 타입을 작성한다.