Application Programming Interface
ex)
TV와 상호작용할 수 있게 해 주는 인터페이스? ▶ 리모컨
컴퓨터 게임과 상호작용하는 인터페이스? ▶ 마우스 & 키보드
쉽게 말하면 Interface는 리모컨이고 API는 리모컨 버튼이다.
웹으로 예를 들자면 브라우저라는 하나의 거대한 리모컨이 있고, 수많은 web api들은 리모컨의 버튼 하나하나라고 이해하면 쉽다.
REST api
서버와의 통신에 REST api를 사용한다면 그 통신은 url로 이루어진다. 특정 url로 요청한 데이터들은 json형태로 받을 수 있다.
HTTP method(GET/POST/PUT/PATCH/DELETE)와 결합하여 사용한다.
ex)
https://www.google.com/search?q=api : 구글에서 "api"로 검색한 결과
https://api.themoviedb.org/3/movie/11 : TMDB에서 movie 11페이지 자료 가져오기
만약 저기서 title, vote_average 두 가지 데이터만 필요하다고 해도 불필요한 다른 data까지 모두 받아야 하며(over-fetching), genre_ids같은 경우에는 장르가 number로만 구분되어 있어 저 번호에 해당하는 장르정보를 받아오기 위해 또 다른 api에 요청을 날려야 한다(under-fetching).
Graphql api
REST api가 url로 이루어진데 반해 Graphql api는 type들의 집합이다. 사용자가 보내거나 return하여 받을 data의 type(Graphql schema)을 graphql server에게 알려 주어야 한다.
Meta, github, pinterest, Airbnb 등 많은 기업에서 차용하고 있다.
data의 type이라길래 처음에 typescript를 말하는 건가? 했는데 전에 SQL에서 본 적 있는 데이터타입이었음
상세설명을 아래처럼 달아주면
이쁘게 잘 뜬다.
필요한 데이터만 요청할 수 있고 apollo와 연동해서 캐싱도 되는데다 좀 더 복잡해질 때를 대비해 초반에 구조를 잘 짜야할 것 같다는 느낌이 드는 것 말고는 단점을 아직은 못찾았는데 이제 막 공부하기 시작해서 더 알아봐야 할 듯.