GraphQL-소개
GraphQL은 RESTful API 호출을 최적화하기 위해 Facebook에서 개발 한 오픈 소스 서버 측 기술입니다. 실행 엔진이자 데이터 쿼리 언어입니다. 이 장에서는 GraphQL 사용의 이점에 대해 설명합니다.
왜 GraphQL인가
RESTful API는 명확하고 잘 구조화 된 리소스 지향 접근 방식을 따릅니다. 그러나 데이터가 더 복잡해지면 경로가 길어집니다. 때로는 단일 요청으로 데이터를 가져올 수 없습니다. 이것이 GraphQL이 유용한 곳입니다. GraphQL은 데이터를 탐색, 검색 및 수정하기위한 강력한 쿼리 구문을 사용하여 그래프 형태로 데이터를 구조화합니다.
다음은 GraphQL 쿼리 언어 사용의 장점입니다-
원하는 것을 요청하고 가져옵니다.
API에 GraphQL 쿼리를 보내고 필요한 것을 정확히 얻으십시오. GraphQL 쿼리는 항상 예측 가능한 결과를 반환합니다. GraphQL을 사용하는 애플리케이션은 빠르고 안정적입니다. Restful 서비스와 달리 이러한 애플리케이션은 서버에서 가져와야하는 데이터를 제한 할 수 있습니다.
다음 예제는 이것을 더 잘 이해하는 데 도움이 될 것입니다.
id, firstName, lastName 및 collegeName 속성을 가진 비즈니스 오브젝트 Student 를 고려해 보겠습니다 . 모바일 애플리케이션이 firstName 및 id 만 가져와야한다고 가정하십시오 . / api / v1 / students 와 같은 REST 엔드 포인트를 설계 하면 학생 객체의 모든 필드에 대한 데이터를 가져옵니다 . 즉, RESTful 서비스가 데이터를 오버 페치합니다. 이 문제는 GraphQL을 사용하여 해결할 수 있습니다.
아래 주어진 GraphQL 쿼리를 고려하십시오-
{
students {
id
firstName
}
}
이것은 id 및 firstname 필드에 대한 값만 반환합니다. 쿼리는 학생 개체의 다른 속성에 대한 값을 가져 오지 않습니다. 위에 설명 된 쿼리의 응답은 다음과 같습니다.
{
"data": {
"students": [
{
"id": "S1001",
"firstName": "Mohtashim"
},
{
"id": "S1002",
"firstName": "Kannan"
}
]
}
}
단일 요청으로 많은 리소스 얻기
GraphQL 쿼리는 관련 비즈니스 객체를 원활하게 검색하는 데 도움이되지만 일반적인 REST API는 여러 URL에서로드해야합니다. GraphQL API는 단일 요청으로 애플리케이션에 필요한 모든 데이터를 가져옵니다. GraphQL을 사용하는 애플리케이션은 느린 모바일 네트워크 연결에서도 빠를 수 있습니다.
이름과 위치라는 속성을 가진 하나의 비즈니스 객체 인 College 를 더 고려해 보겠습니다 . 학생 비즈니스 오브젝트는 대학 객체와의 연관 관계를 가지고있다. 학생과 대학의 세부 정보를 가져 오기 위해 REST API를 사용한다면 결국 서버에 / api / v1 / students 및 / api / v1 / colleges 와 같은 두 가지 요청을합니다 . 이로 인해 각 요청에서 데이터를 적게 가져옵니다. 따라서 모바일 애플리케이션은 원하는 데이터를 얻기 위해 서버를 여러 번 호출해야합니다.
그러나 모바일 애플리케이션은 GraphQL을 사용하여 단일 요청으로 Student 및 College 개체에 대한 세부 정보를 가져올 수 있습니다.
다음은 데이터를 가져 오는 GraphQL 쿼리입니다-
{
students{
id
firstName
lastName
college{
name
location
}
}
}
위 쿼리의 출력은 아래와 같이 요청한 필드를 정확히 포함합니다.
{
"data": {
"students": [
{
"id": "S1001",
"firstName": "Mohtashim",
"lastName": "Mohammad",
"college": {
"name": "CUSAT",
"location": "Kerala"
}
},
{
"id": "S1002",
"firstName": "Kannan",
"lastName": "Sudhakaran",
"college": {
"name": "AMU",
"location": "Uttar Pradesh"
}
},
{
"id": "S1003",
"firstName": "Kiran",
"lastName": "Panigrahi",
"college": {
"name": "AMU",
"location": "Uttar Pradesh"
}
}
]
}
}
유형 시스템으로 가능한 것을 설명하십시오.
GraphQL은 강력한 형식이며 쿼리는 필드 및 관련 데이터 형식을 기반으로합니다. GraphQL 쿼리에 유형 불일치가있는 경우 서버 응용 프로그램은 명확하고 유용한 오류 메시지를 반환합니다. 이를 통해 클라이언트 응용 프로그램에서 원활한 디버깅과 버그를 쉽게 감지 할 수 있습니다. GraphQL은 또한 명시 적 데이터 변환 및 구문 분석을 줄이는 데 도움이되는 클라이언트 측 라이브러리를 제공합니다.
Student 및 College 데이터 유형 의 예 는 다음과 같습니다.
type Query {
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
fullName:String
college:College
}
type College {
id:ID!
name:String
location:String
rating:Float
students:[Student]
}
강력한 개발자 도구로 더 빠르게 이동
GraphQL은 문서화 및 쿼리 테스트를위한 풍부한 개발자 도구를 제공합니다. GraphiQL은 쿼리와 스키마에 대한 문서를 생성하는 훌륭한 도구입니다. 또한 쿼리를 작성하는 동안 GraphQL API 및 지능형 코드 완성 기능을 테스트 할 수있는 쿼리 편집기를 제공합니다.