REST는 Representational State Transfer 의 줄임말이다.
HTTP를 통해 CRUD(Create, Read, Update, Delete)를 실행하는 API를 뜻한다.
모든 Resource (자료, User, …) 들을 하나의 Endpoint 에 연결해놓고,
각 Endpoint 는 그 Resource 와 관련된 내용만 관리하게 하자는 방법론이다.
글 관련 API = /posts 글 작성 = POST /posts 글 수정 = PATCH /posts/[postid] 글 삭제 = DELETE /posts/[postid] 댓글 관련 API = /posts/[postid]/comments 댓글 작성 = POST /posts/[postid]/comments 댓글 수정 = PATCH /posts/[postid]/comments/[commentid] 댓글 삭제 = DELETE /posts/[postid]/comments/[commentid]
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일이다.
HTTP 프로토콜을 사용하므로 REST API 사용을 위한 인프라를 구축할 필요가 없다.
HTTP 표준프로토콜을 따르는 모든 플랫폼에서 호환된다. (범용성)
REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
서버와 클라이언트의 역할을 명확하게 분리한다.
표준이 존재하지 않는다.
사용할수 있는 메소드가 4가지 밖에 없다.
구형의 브라우저가 아직 지원하지 못하는 부분이 존재한다.
GraphQL 은 Graph Query Language 의 줄임말이다.
Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종이다.
GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.
HTTP 요청의 횟수를 줄일 수 있다.
HTTP 응답의 Size를 줄일 수 있다.
File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.
재귀적인 Query 가 불가능하다.
- GraphQL API는 필요한 정보들만 선택하여 받아올 수 있다.
- 사용한 Query문에 따라 응답의 구조가 달라짐
- Overfetching 문제 해결
- 데이터 전송량 감소
- 여러 계층의 정보들을 한 번에 받아올 수 있다.
- Underfetching 문제 해결
- 요청 횟수 감소
- GraphQL은 주로 하나의 endpoint에서 모든 요청을 처리한다.
- 하나의 URL에서 POST로 모든 요청 가능