API는 FTP/SMTP/HTML,HTTP 등의 프로토콜 집합을 사용하여 두 소프트웨어가 서로 통신할 수 있게 하는 메커니즘이다. 쉽게 설명하면 애플리케이션이 어떤 프로그램이 제공하는 기능을 사용할 수 있게하는 것을 말한다. 서버와 클라이언트 사이의 길(함수)을 만들어 주는 것이다.
요청을 보내는 컴퓨터 > 클라이언트
요청에 응답하는 컴퓨터가 > 서버
API와 상호작용 시 개발자들이 가장 많이 사용하는 2가지 방법이 Rest API와 GraphQL이다.
Rest API는 '자원의 표현으로 상태를 전달하는 것'이라는 의미를 갖는다. Rest API의 경우 URI로 자원을 표현하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용한다.
//axios를 설치한 후 사용
import axios from 'axios'
const result = await axios.get(URI)
Rest API는 필요한 정보만 받는 것이 불가능하다. 따라서 주로 필요한 정보에 비해 너무 많은거 적은 정보를 받게 된다. 이는 규모가 큰 회사에서는 비용적인 측면에서 문제가 될 수 있다. 예를 들어 게시판의 제목만 필요한 경우 제목을 받아오기위해 불필요한 작성자, 내용 등의 정보가 함께 받아와지는 것이다. 그렇게 되면 더 불필요한 데이터에 대한 비용이 발생하게 되는 것이다. 이러한 문제를 해결하는 새로운 쿼리 언어가 바로 GraphQL이다.
GraphQL는 페이스북에서 만든 API를 위한 쿼리 언어이다. GraphQL은 query와 mutation 두 가지 타입을 API를 보낸다.
query -> 백엔드에 저장된 정보에 변화를 주지 않고 꺼내보는 경우
mutation -> 등록, 수정, 삭제 등 백엔드에 저장된 정보에 변화를 주는 경우
mutation 사용 예시
//제품의 판매자와 판매물품 데이터 생성/저장 요청 후 message를 응답으로 받는다.
mutation{
createProduct(seller:"철수", createProductInput: {
name : "핸드폰"
detail:"최신폰"
price:200000
})
{
message
}
}
query 사용예시
//등록된 상품에서 상품 id에 맞는 데이터를 가져오며 응답 데이터로 판매자의 이름을 가져온다.
query {
fetchProduct(productId: "c0ff2003-e26e-43d7-b883-795edb3a770d") {
seller
}
}
이처럼 GraphQL의 경우 등록된 상품 데이터 중 판매자와 물품이름만 골라서 받아올 수 있다. 따라서 대규모 회사에 적합하다. Rest API와는 다르게 필요한 정보만을 요청해서 네트워크 비용을 절감할 수 있다.