API란?
-
API는 적절한 Requset
를 하였을때 그에 맞는 Response
를 되돌려 주는 창구를 Web을 통해 보여주는 것을 말한다
-
API는 주로 어떠한 정보들(뉴스,주식 시세,환율등등..)을 Request
하고 수정하기 위해 만들어지는 경우가 많다.
RESTful이란?
모든 자원들을 하나의 창구로 연결해놓고,
각 창구에는 그 자원과 관련된 내용만 괸리하게 하자는 방법론.
- 좁은 의미로는 HTTP Protocol을통한 CRUD(Create,Read,Update,Delete)를 실행하는 API
자원
자원이란 해당 소프트웨어가 관리하는 모든것
예를들어, DB의 유저정보가 자원이라면 USER == 자원이다.
REST API는 주소만으로도 이게 무슨 요청인지 추측할 수 있다.
// 예시
글을 보는 API = /posts
글 작성 = POST (/posts)
글 수정 = PATCH (/posts/[id])
글 삭제 = DELETE (/posts/[id])
등등등..
이러한 REST의 조건을 만족하는 APIfmf RESTful API라 부른다.
장점
- HTTP프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있다.
- REST API가 의도하는 바를 확실하게 나타내므로 의도하는바를 쉽게 파악가능.
- 서버와 클라이언트의 역할을 확실하게 분리한다.
단점
- 표준이 존재하지 않는다.
- 사용할수 있는 메소드가 4개뿐.
GraphQL
GraphQL은 Graph Query Language의 줄임말이다.
탄생배경
- RESTful로는 다양한 기종에서의 정보를 일일히 구현하는것이 어려웠다.
- 때문에 정보를 사용하는 측에서 원하는 대로 가져오며, 보다 편하게 수정할 수 있도록 하는 표준화된 API를 만들었다.
RESTful과의 차이점.
- 전체 API를 위해서 하나의 창구만을 사용한다.
(RESTful API는 자원마다 하나의 창구를가지고있어 그 창구에서 그 자원에대한 거의, 모든것을 담당한다)
- 요청할때 사용한 Query문에 따라 응답의 구조가 달라진다.
- 유연하며, 백엔드에서 지정하는 틀이 거의 없다
장점
- HTTP요청의 횟수를 줄일 수 있다.
- HTTP응답의 크기를 줄일 수 있다.
(즉 경량화된 API라는것)
단점
- Image,Audio,File등등 Text만으로 하기 힘든내용들을 처리하기 매우 복잡하다.
- 고정된 요청,응답만 필요한 경우에는 RESTful API보다 무거워진다.
그래서 GraphQL or RESTful?
GraphQL
- 다른 모양의 다양한 요청에대한 응답을 필요로 할때.
- 대부분의 요청이 CRUD인 경우
RESTful
- HTTP에 의한 캐싱을 잘 사용하고 싶을때
- Text만으로 처리되지 않는 요청들이 있는경우.
- 요청의 구조가 정해진경우.
마무리
GraphQL은 시도해본적이 없어 들어보기만해봤는데, 이번 Nest.js를 진행하면서 기존에 시도해봤던 REST API뿐만아니라 GraphQL을 통한 웹서버 구현을 해봐야겠다.
참고한곳
GraphQL과 RESTful API
REST API와 GraphQL의 차이점