API란 HTTP 요청을 Back-end 컴퓨터에 보냈을때 실행되는 Back-end 기능입니다.
Front-end에서 HTTP라는 길을 통해서 게시물 데이터를 Back-end에 보내 저장시켰습니다.
만약, 게시물이 아닌 프로필 데이터를 저장하고 싶으면 어떻게 해야 할까요?
그러기 위해선, 여러개의 HTTP 라는 길이 존재
해야 하고, 각각의 요청마다 담당자가 필요합니다.
우리는 이 담당자를 API
라고 부릅니다.
API는 크게 4가지 방식으로 구분할 수 있습니다.
생성하는 API
⇒ CREATE조회하는 API
⇒ READ수정하는 API
⇒ UPDATE삭제하는 API
⇒ DELETE**API 명세서**
는 **API 사용 설명서**
입니다.
홈페이지를 만들기 전, Back-end 개발자가 만들어 놓은 API 가 몇 개 있고, 어떻게 구성되어있는지 확인하기 위해 필요합니다.
API명세서는 Back-end 개발자에게 받아야 합니다.
Back-end 개발자는 자신이 만든 API를 직접 문서 형태로 작성하거나, swagger 라는 프로그램을 설치해서 만듭니다.
REST는 Representational State Transfer라는 용어의 약자로 API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처이다. 말이 좀 어려운데
컴퓨터에게 동작 방법을 지시하는 명령어 집합의 모임 구조라는 말이다. 즉 보다 쉽게 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다.
장점
확장성
REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있습니다. 통신 병목 현상을 일으키지 않으면서 확장성을 지원합니다.유연성
RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원합니다독립성
API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있습니다. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있습니다.
메서드
HTTP 메서드는 리소스에 수행해야 하는 작업을 서버에 알려줍니다.
GET
클라이언트는 GET을 사용하여 서버의 지정된 URL에 있는 리소스에 액세스합니다. GET 요청을 캐싱하고 RESTful API 요청에 파라미터를 넣어 전송하여 전송 전에 데이터를 필터링하도록 서버에 지시할 수 있습니다.
POST
클라이언트는 POST를 사용하여 서버에 데이터를 전송합니다. 여기에는 요청과 함께 데이터 표현이 포함됩니다. 동일한 POST 요청을 여러 번 전송하면 동일한 리소스를 여러 번 생성하는 부작용이 있습니다.
PUT
클라이언트는 PUT을 사용하여 서버의 기존 리소스를 업데이트합니다. POST와 달리, RESTful 웹 서비스에서 동일한 PUT 요청을 여러 번 전송해도 결과는 동일합니다.
DELETE
클라이언트는 DELETE 요청을 사용하여 리소스를 제거합니다. DELETE 요청은 서버 상태를 변경할 수 있습니다. 하지만 사용자에게 적절한 인증이 없으면 요청은 실패합니다.
GraphQL 은 Graph Query Language 의 줄임말입니다.
Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종으로 애플리케이션 프로그래밍 인터페이스(API)를 위한 쿼리 언어입니다.
페이스북에서 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 힘들어 만들었으며, 그게 굉장히 편리했기 때문에 유명한 사이트에서 사용중인 통신방법입니다.
GraphQL은 필요한 데이터만 골라 받을 수 있는 장점이 있어서, 효율적인 통신을 할 수 있습니다.
장점
- HTTP 요청의 횟수를 줄일 수 있다.
RESTful 은 각 Resource 종류 별로 요청을 해야하고, 따라서 요청 횟수가 필요한 Resource 의 종류에 비례한다.
반면 GraphQL 은 원하는 정보를 하나의 Query 에 모두 담아 요청하는 것이 가능하다.- HTTP 응답의 Size 를 줄일 수 있다.
RESTful 은 응답의 형태가 정해져있고, 따라서 필요한 정보만 부분적으로 요청하는 것이 힘들다.
반면 GraphQL 은 원하는 대로 정보를 요청하는 것이 가능하다.
단점
- File 전송 등 Text 만으로 하기 힘든 내용들을 처리하기 복잡하다.
고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 RESTful API 의 경우보다 더 커진다.- 재귀적인 Query 가 불가능하다. (결과에 따라 응답의 깊이가 얼마든지 깊어질 수 있는 API 를 만들 수 없다.)
메서드
MUTATION
MUTATION은 생성, 수정, 삭제를 할 수 있습니다.
QUERY
QUERY는 조회를 할 때 사용합니다.
rest-API는 API 이름이 마치 홈페이지 주소
처럼 생겼습니다.
graphql-API는 API 이름이 일반적인 함수
와 같습니다.
rest-API
는 응답 결과로 back-end 개발자가 만든 함수에서 보내주는 모든 데이터
를 받아야만 합니다.
반면에, graphql-API
는 back-end 개발자가 만든 함수에서 필요한 데이터만
골라 받을 수 있습니다.
그래프큐엘은 필요한 데이터만 가져오기 때문에 더 가볍고 더 효율적이구나를 알수 있습니다. 하지만 그럼에도 rest를 사용하는 회사나 팀이 있을 수 있고, 카카오나 네이버 등 다른 큰 회사에서 제공해주는 API들은 대부분 rest API로 제공되어 rest-API도 중요하다.
rest-API는 axios
graphql-API은 apollo-client
이런 차이점을 가진다.
언제 뭘 사용하는게 좋을 것인가.
- GraphQL
서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때- RESTful
HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
요청의 구조가 정해져 있을 때
각각의 언어마다 여러 장단점이 있어 상황에 따라 선택하거나 같이 사용하는것이 좋다.