API
API는 적절한 요청을 하였을 때 그에 맞는 응답을 되돌려 주는 창구 (Endpoint)를 Web를 통해 노출한 것을 말한다.
이 APIfmf 만드는 방법 중 하나가 REST라는 것이 있고, 예전부터 현재까지 많이 사용된다.
REST
REpresentational State Transfer 의 줄임말이며,
자원(resource)의 표현(representation)에 의한 상태 전달이다.
HTTP를 통해 CRUD(Create, Read, Update, Delete)를 실행하는 API를 뜻한다.
REST 장,단점
* 장점
- REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을
최대한 활용할 수 있는 아키텍쳐 스타일이다.
- HTTP 프로토콜을 사용하므로 REST API 사용을 위한 인프라를 구축할 필요가 없다.
- HTTP 표준프로토콜을 따르는 모든 플랫폼에서 호환된다. (범용성)
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
서버와 클라이언트의 역할을 명확하게 분리한다.
* 단점
- 표준이 존재하지 않는다.
- 사용할수 있는 메소드가 4가지 밖에 없다.
- 구형의 브라우저가 아직 지원하지 못하는 부분이 존재한다.
GraphQL
GraphQL 은 Graph Query Language 의 줄임말이다.
Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해
사용되는 Computer 언어의 일종이다.
GraphQL 장,단점
* 장점
- HTTP 요청 횟수를 줄일 수 있다.
RESTful 은 각 Resource 종류 별로 요청을 해야하고,
따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.
* 단점
- File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
- 고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가
RESTful API 의 경우보다 더 커진다.
- 재귀적인 Query 가 불가능하다.
(결과에 따라 응답의 깊이가 얼마든지 깊어질 수 있는 API 를 만들 수 없다.)
RESTful? GraphQL?
선택 기준
* GraphQL
- 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
- 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
* RESTful
- HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
- File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
- 요청의 구조가 정해져 있을 때