Rest-API vs GraphQL-API

quin1392·2022년 5월 13일
0

GraphQL-API가 세상에 등장하기 전에는 모두 REST-API로 웹과 모바일 어플리케이션이 구현되었습니다. REST-API는 통신을 위해 데이터를 요청하고 그것을 전송하는 API로 클라이언트와 서버 사이의 온라인 통신을 위한 필수요소입니다.

하지만 REST-API의 단점 때문에 Facebook은 기존의 단점을 개선한 새로운 API의 필요성을 느꼈고 그로 인해 만들어진 것이 GraphQL-API입니다.

REST는 API

REST는 REpresentational State Transfer의 줄임말로 HTTP를 통해서 CRUD를 실행하는 API를 뜻합니다.
Http uri를 통해서 자원을 명시하고, Http Method(POST, GET, PUT, DELETE)를 통해서 해당 자원에 대한 CRUD를 적용할 수 있습니다. REST Api를 통하면 주소만으로 대략 무슨 요청인지 아는 것이 가능합니다.

게시글 API -> /posts
글 작성 -> /posts
글 수정 -> /posts/{id}
글 삭제 -> /posts/{id}

RESTful

REST의 조건을 만족하는 API를 RESTful Api라 부르고 이번 방식으로 API를 작성하는 것을 'RESTful하다' 라고 합니다.

즉 RESTful하다라는 것은 REST Api의 설계 의도를 명확하게 지키는 것을 의미합니다.

기본적으로 REST는 웹의 기존 기술과 HTTP Protocol을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있습니다. Rest Api를 위한 인프라 구축의 필요성이 없고, Http Protocol 표준을 따르는 모든 플랫폼에서 범용적으로 사용이 가능합니다.

하지만, 사용에 있어 표준이 없고, 사용할 수 있는 메소드가 4가지 뿐이며, 필요없는 자원까지 받아오기에 비용이나 시간적인 부분에서 불리합니다.

GraphQL API

GraphQL은 Graph Query Language의 줄임말입니다.

Query Language는 정보를 얻기 위해서 보내는 Query를 만들기 위해 사용되는 컴퓨터 언어의 일종으로 그 중에서 GraphQL는 Server API를 통해서 정보를 주고받기위해 사용되는 Query Language입니다.

기존의 통신 API는 REST API가 압도적이었습니다. 하지만 REST API가 가진 몇 가지의 문제점 때문에 새로운 API의 필요성이 생겼고, Facebook에서 GraphQL API를 탄생시켰습니다. 예를들어 IOS와 안드로이드에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API를 구현하는 것이 힘들었는데 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고, 보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query Language를 만들게 되었습니다.

GraphQL API는 주로 전체 API를 위해서 하나의 Endpoint를 사용합니다. 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라지며 백엔드에서 지정해놓는 틀이 거의 없기 때문에 유연하게 사용할 수 있씁니다.

GraphQL API의 가장 큰 장점은 요청의 횟수와 응담의 사이즈를 줄여 전송 시간을 줄일 수 있고, 통신을 위한 비용을 줄여 더욱 경제적입니다.

하지만 GraphQL API은 File 전송 등 Text만으로 처리하기 힘든 내용들에 대해 처리하는 것이 복잡하고 고정된 요청, 고정된 응답만을 필요로 하는 어플리케이션의 경우 Query로 인해서 요청의 크기가 REST API보다 더 커질 수 있습니다. 그 외에 재귀적인 Query가 불가능합니다.

Rest-API vs GraphQL-API

둘 중 하나를 선택하기보다는 둘 모두를 가지고 가며, 선택적인 영역에서 어울리는, 필요한 API를 선택해서 사용하는 것이 가능 좋습니다.

GraphQL-API

대부분의 요청이 CRUD(CREATE-READ-UPDATE-DELETE)에 해당하거나 다양한 요청에 대해 대응할 필요가 있을 때 GraphQL이 강력합니다.

Rest-API

File전송과 같은 단순한 Text로 전송이 어렵거나 요청의 구조가 정해져 일관될 경우 Rest API가 더 강력합니다.

0개의 댓글