GRAPHQL
GraphQL 은 Graph Query Language 의 줄임말이다.
Query Language 란 무엇인가?
Query Language 는 정보를 얻기 위해 보내는 질의문Query을 만들기 위해 사용되는 Computer 언어의 일종이다.
GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.
GraphQL 과 RESTful 의 차이점
RESTful같은경우 각각의 리소스마다 endPoint 를 가지고 그 endPoint 에서는 그 리소스의 대한 모든것들을 담당한다.
GraphQL 은 전체 API 를 위해서 단 하나의 endPoint 만을 사용한다.
개발자 라면 위 두사진만 보아도 GraphQL의 장점이 보일거라고 생각 한다.
-
RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다. -
HTTP 응답의 Size 를 줄일 수 있다. RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다. 반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.
-
File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
-
고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.
-
재귀적인 Query 가 불가능하다.
물론 GraphQL 에서 File 전송을 할 수 없는 것은 아니나, 일반적인 GraphQL API 에 비해서 복잡해지거나 외부의 Service 에 의존해야하는 등 문제가 발생한다.
Grahpql 활용
일반적인 스키마 를 정의 할때 쓰이는 방법이다.
이 쿼리는 해당 GraphQL 스키마 Query가 다음 user필드를 사용하여 루트 유형을 정의한 경우에만 유효 합니다.
따라서 스키마의 루트 유형은 서버에서 허용 할 쿼리 및 변형의 모양을 결정합니다.
위의 예제에서 GraphQLSchema객체는 다음과 같으며 조금더 코드를 가다듬을 경우, 아래와같이 정리 할수있다.
쿼리 실행 흐름
-
쿼리가 서버에 도착합니다.
-
서버는 루트 필드에 대한 리졸버를 호출합니다 user- fetchUserById이 객체를 반환 한다고 가정 합니다.{ “id”: “abc”, “name”: “Sarah” }
-
서버는 id해당 User유형 의 필드 에 대한 확인자를 호출합니다. root이 해석자 의 입력 인수는 이전 호출의 반환 값이므로 단순히 반환 할 수 있습니다 root.id.
-
3과 유사 root.name 호출
-
프로세스가 종료됩니다.