REST API란?
1. REST API란 무엇인지
2. RESTful 한 것의 의미
3. REST API와 GraphQL의 차이점 에 대해 다뤄볼 것입니다.
REST API ?
REST API란 정보들을 주고받는데 있어서 개발자들이 널리 쓰이는 일종의 '형식'입니다.
어떤 기술이나 제품이 아닌 '형식'이기 때문에 어떤 프로그래밍 언어, 프레임워크 등을 쓰는지간에 REST API 폼에 맞춰서 어디에서든 사용할 수 있습니다.
전에 더 쉽게 이해하기 위해 API에 대한 개념에 대해 살짝 정리하겠습니다.
API는 소프트웨어가 다른 소프트웨어로 부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단입니다!
우리가 자주 접할 수 있는 것은 Web API, Windows API, Kakao API 등이 있죠? REST API도 그런 API중 하나입니다.
REST API는 프론트엔드에서 서버에 요청을 넣거나 하는 등의 REST 형식의 API 입니다.
REST의 특성은 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청 자체로 추론이 가능합니다.
그래서 RESTful하게 만든 API는 요청을 보내는 주소만 보아도 대략적으로 이게 무엇을 요청하는지 파악이 가능합니다.
위의 이미지처럼 자원을 구조와 함께 나타내는 형식의 구문자를 URI라고합니다.
(URI는 동사가 아닌 명사로 이루어져야 합니다.)
서버에서는 이렇게 조회하는 것 뿐만 아니라 Create 생성, Read 조회, Update 수정, Delet 삭제 (C.R.U.D)의 작업들도 합니다.
클라이언트에서 서버에 REST API로 요청을 보낼 때에는 HTTP라는 규약에 따라 신호를 전송합니다.
REST API에서는 여기서 GET, POST, DELET, PUT + PATCH 메소드를 사용합니다.
(POST, PUT, PATCH는 body가 있어서 정보들을 많이, 비교적 안전하게 감춰서 실어 보낼 수 있습니다.)
그런데 사실 이 기능들이 특정 용도에 제한되어 사용되는 것은 아닙니다. POST method 하나로도 수정, 삭제, 읽기다 가능하다고합니다.
하지만 그럼 RESTful 하지 않겠죠? RESTful하게 API를 만들기 위해서는 상황과 목적에 따라 method를 사용해야합니다.
참고로 PUT과 PATCH는 둘 다 새로운 정보를 body에 실어보냅니다.
두 매서드의 차이점은 PUT은 정보를 통째로 바꿀 때,
PATCH는 정보 중 일부를 특정 방식으로 변경할 때 사용합니다.
정리!
REST API란 HTTP통신에서 요청을 보낼 때 어떤 URI에 어떤 method를 사용할지 개발자들 사이에서 널리 지켜지는 약속이다.
REST API는 '형식'이기 때문에 기술/언어 등에 구애받지않는다.
어떤 언어로 만들든지 간에 HTTP 통신을 한다면 이 형식을 준수하여 RESTful하게 만들 수 있다.
REST API 와 GraphQL의 차이점
REST API의 특성이자 장점은 method와 URI를 조합하면, 무엇을 요청하는지 예측이 가능하다는 점입니다.
그러나 필요가 없는 정보들까지 받게된다는 비효율적인 문제점을 가지게 됩니다.
정보를 많이 가져오는 것은 나쁜 것은 아니지만, 전송되는 데이터의 양의 측면에서 소모가 큽니다.
또한 받는 것이 정해져 있다는 것은 URI마다 받는 값이 정해져 있기에, 때에 따라 요청을 여러 번 보내야 하는 횟수 문제도 있습니다.
[GraphQL] 특징/장점
반면 GraphQL로는 내가 원하는 정보만 골라서 요청할 수 있습니다.
GraphQL에서는 body에 들어가는 주문서로 HTTP 요청 횟수를 줄일 수있습니다.
그리고 body에 들어가는 주문서를 유동적으로 요청하여 Response 구조를 원하는 방식으로 변경할 수있습니다.
또 여러 depth의 정보들이 한 번에 들어오면 클라이언트 쪽에서도 구현이 편리해집니다.
같은 API 서버를 사용하더라도, 사용자마다 필요로 하는 정보가 다르고
PC, 안드로이드, 아이폰, 아이패드 등 기기들마다 클라이언트에서 구현해야 할 상황이 다를 수 있습니다.
이런 상황에서는 GraphQL을 사용하는 것이 효율적입니다.
GraphQL 코드 구조
- GraphQL은 POST만을 사용하여 정보 요청을 합니다.
- 그 요청의 body에 어떤 주문을 써서 보내는가에 따라 서버가 할 일이 지시됩니다.
- URI는 (도메인)/graphql 형식으로 이루어져 있습니다.
- mutation은 데이터베이스에 수정이 가해진다는 뜻입니다.
- 2번째 줄의 함수는 서버에 지정된 함수 이름을 넣습니다.
그런데 GraphQL은 요청을 하는데 복잡한 구조를 가지고 있습니다.
언제 REST API를 사용하고 GraphQL를 사용하는 것이 좋을까요?
=> 받아야 하는 항목들이 많은데 딱 정해져있는 경우에는 REST API가 더 효율적입니다.
아래 이미지를 보면 REST API로 요청을 보내면 1줄로 깔끔하게 요청을 보낼 수 있는 반면 GraphQL은 더 길고 복잡합니다.
이상적인 것은 백엔드 서버에 REST API, GraphQL을 둘 다 구현해 두고 각 정보마다 요청이 유리한 것을 골라 사용하는 것입니다.
요약하여 REST API와 GraphQL를 비교하면
REST API: 요청은 단순하고 데이터는 복잡하다.
GraphQL: 요청은 복잡하고 데이터는 단순하다.