GraphQL

TypeOrm GraphQL

GRAPHQL

GraphQLGraph Query Language 의 줄임말이다.
Query Language 란 무엇인가?
Query Language 는 정보를 얻기 위해 보내는 질의문Query을 만들기 위해 사용되는 Computer 언어의 일종이다.
GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.

GraphQL 과 RESTful 의 차이점

restful

RESTful같은경우 각각의 리소스마다 endPoint 를 가지고 그 endPoint 에서는 그 리소스의 대한 모든것들을 담당한다.

restful

GraphQL 은 전체 API 를 위해서 단 하나의 endPoint 만을 사용한다.

개발자 라면 위 두사진만 보아도 GraphQL의 장점이 보일거라고 생각 한다.

GraphQL 의 장점

  • RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
    반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.

  • HTTP 응답의 Size 를 줄일 수 있다. RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다. 반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.

GraphQL 의 단점

  • File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.

  • 고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.

  • 재귀적인 Query 가 불가능하다.
    물론 GraphQL 에서 File 전송을 할 수 없는 것은 아니나, 일반적인 GraphQL API 에 비해서 복잡해지거나 외부의 Service 에 의존해야하는 등 문제가 발생한다.

Grahpql 활용

스키마 정의 언어

schema

일반적인 스키마 를 정의 할때 쓰이는 방법이다.

schema

이 쿼리는 해당 GraphQL 스키마 Query가 다음 user필드를 사용하여 루트 유형을 정의한 경우에만 유효 합니다.
따라서 스키마의 루트 유형은 서버에서 허용 할 쿼리 및 변형의 모양을 결정합니다.

schema

위의 예제에서 GraphQLSchema객체는 다음과 같으며 조금더 코드를 가다듬을 경우, 아래와같이 정리 할수있다.

schema

쿼리 실행 흐름

query

  1. 쿼리가 서버에 도착합니다.

  2. 서버는 루트 필드에 대한 리졸버를 호출합니다 user- fetchUserById이 객체를 반환 한다고 가정 합니다.{ “id”: “abc”, “name”: “Sarah” }

  3. 서버는 id해당 User유형 의 필드 에 대한 확인자를 호출합니다. root이 해석자 의 입력 인수는 이전 호출의 반환 값이므로 단순히 반환 할 수 있습니다 root.id.

  4. 3과 유사 root.name 호출

  5. 프로세스가 종료됩니다.

query-result