REST API의 버튼은 URL, GraphQL API의 버튼은
1. REST API
REST API와 GraphQL API는 요청 방식에서 차이가 있다고 할 수 있다. 즉, 통신을 하기 위해 요청하는 방식이 조금 다른 것 뿐이다. REST API는 URL을 이용해 원하는 곳에서 원하는 데이터 목록을 불러올 수 있도록 만들어져 있기에 각각의 원하는 URL로 요청을 보내 응답받는다. 그렇기 때문에 예측가능한 것들이 많다.
nomadmovies.co/api/movies // 영화 전체 목록 조회
nomadmovies.co/api/movies/1 // 1번 아이디를 가진 영화 조회
REST API는 HTTP 요청 메서드랑 같이 사용할 수 있는데 각각의 메서드에 따라 URL로 접속하여 수행할 수 있는 것들이 다르다. 대표적으로 많이 사용하는 것이 GET, POST, PUT, DELETE 일 것이다.
GET nomadmovies.co/api/movies // 영화 전체 목록 조회
POST nomadmovies.co/api/movies // 영화 추가, 생성
PUT nomadmovies.co/api/movies/1 // 1번 아이디를 가진 영화 수정
DELETE nomadmovies.co/api/movies/1 // 1번 아이디를 가진 영화 삭제
REST API는 쉬운 사용으로 정말 많이 사용되고 있지만 그럼에도 단점이 존재한다. 대표적으로 표준이 없다는 것과 HTTP 메소드를 사용하기에 메소드의 형태가 제한적이라는 문제가 있다. 거기에 더하여 Over fetching, Under fetching의 문제도 발생한다.
[ REST API 표준의 부재, 여러개의 Endpoint? ]
REST API는 표준이 존재하지 않기 때문에 관리의 어려움이 나타나며, 그 결과 많은 사람들이 하나씩 덧붙이는 정당화된 약속들로 구성되고 움직인다. 성공적인 REST API의 사례를 따라가는 경향이 있으며 이에 따라 암묵적인 규칙이 생성되고 사라지기도 한다. 그리고 client 에서 각각의 다른 Endpoint 로 요청을 해야 원하는 응답을 불러올 수 있다.
[ 메소드의 형태가 제한적 ]
REST API는 HTTP 메소드를 사용하는데 HTTP 메소드를 편리하게 사용할 순 있지만 메소드의 형태가 제한적이라는 단점이 있다.
[ Over fetching ]
만들어진 url에 받아오고자하는 데이터를 요청했을 때, 필요없는 데이터까지 너무 많은 데이터들이 한번에 내려올 수가 있다. 그렇기 때문에 한번에 많은 양의 데이터를 받으면 속도가 느려질 수도 있고, 필요없는 데이터를 걸러내는 작업 또한 필요할 것이다.
[ Under fetching ]
Under-fetching은 Over-fetching에 대한 반대되는 개념으로 필요한 데이터를 덜 받는 것을 의미한다. 즉 endpoint인 url로 요청을 보냈을 때 내가 필요한 데이터가 모두 들어있지 않을 가능성이 있다는 것이다. 즉, REST API를 사용하면 하나의 endpoint에 너무 많은 데이터가 들어있거나, 필요한 데이터가 모두 들어있지 않거나 등의 문제가 발생할 수 있다.
2. GraphQL API
이러한 REST API의 문제를 해결하기 위해 GraphQL이 등장했다고 하는데 어떤 방식으로 해결을 하는지 알아보려고 한다.
[ Over fetching, Under fetching 문제 해결 ]
기존 REST API에서는 서버에서 데이터를 보내주면 프론트에서는 내려주는 데이터를 모두 받아야하거나 필요한 데이터를 모두 받지 못하는 경우가 있었는데 GraphQL에서는 프론트에서 필요한 데이터만 받아올 수 있다는 장점이 있다. 그렇기 때문에 필요 없는 데이터까지 모두 받아올 필요가 없어지고, 필요한 데이터만 골라서 받아올 수 있기 때문에 이는 획기적인 해결책이라고 볼 수 있다.
[ Endpoint ]
기존 REST API는 각각의 기능에 따라 여러개의 Endpoint를 사용하는데 GraphQL는 주로 하나의 Endpoint를 사용한다.
3. REST API vs GraphQL API ?
이렇게 REST API와 GraphQL API의 차이와 장단점에 대해 간단하게 알아보았는데, 각각의 장단점이 명확하게 존재하기에 필요에 따라 좀 더 효율적인 API를 선택하는 것이 좋은 것 같다. 여러가지 모양의 다양한 요청들에 대한 응답이 필요할 때나 단순 CRUD의 반복이 이루어질 때는 GraphQL API가 조금 더 효율적일 수 있고, 요청의 구조가 정해져있거나 File 전송 등의 복잡한 요청이 필요할 때는 REST API 사용이 효율적일 것 같다.