기존 REST API나 다른 API 호출 방식은 서버가 정의한 데이터 구조만을
한번에 하나씩 가져올 수 있다.
이러한 이유로 앱 단에서 직접 뷰에 보여질 쿼리를 만들어
모든 데이터를 한번에 가져와야한다.
GraphQL은 클라이언트에서 자기가 필요한 데이터만을 쿼리할 수 있도록 하여
위에서 언급한 문제를 해결한다.클라이언트가 자신에게 필요한 데이터에 대한 Query를 선언해 GraphQL에 넘기면
서버는 Query를 해석해 해당 데이터만 클라이언트에 반환한다.
사용자라는 객체에 속성이 id, name, age, phoneNumber가 있다고 가정한다.
만약 특정 id를 가진 사용자의 name과 age만 필요하다면 다음과 같이 사용하면 된다.query Author($id : Int) { author(id: $id){ name email } }
HTTP 요청을 할때
GET
,POST
,DELETE
,PATCH
등의 메서드가 제공되는 것처럼
GraphQL 또한query
,mutation
,subscription
의 세가지 요청 방식을 제공한다.
읽기 전용으로 데이터를 가져오기 위한 메서드이다.
데이터가 변화될 필요없이 단순한 조회가 필요할 때이다.
예를 들어 View를 그리기 위한 정보 혹은 유저 정보를 가져오기 위한 경우 사용한다.
데이터를 변경한후 가져오기 위한 메서드이다.
요청을 데이터를 변화시켜야 하는 경우에 사용한다.
예를 들어 회원 가입을 통해 유저가 등록되어야 한다거나,
주문이 접수되어 유저의 주문 정보가 업데이트 되었을 경우 사용한다.
실시간으로 변경된 데이터를 가져오기 위한 요청 방식이다.
웹소켓을 통해 소켓 통신을 열어두고 데이터 업데이트 시 알리는 방식으로 이뤄진다.
데이터가 자주 업데이트 되어야하는 View(채팅)라면 매번 업데이트 될 때 마다
HTTP 요청을 보내는 것은 자원의 낭비가 심하므로 소켓통신으로 처리하는 것이 좋다.