API는 Application Programming Interface의 약자이며, Interface의 사전적 의미는 "의사소통이 가능"하도록 만들어진 "접점"을 의미한다. 즉, 서버 API는 클라이언트가 서버에 적절한 요청을 하였을 때, 그에 맞는 응답을 되돌려주는 창구를 Web을 통해 노출한 것을 말한다. 이를 이용해 요청자는 서버로부터 정보를 요청하거나 수정할 수 있다. 이 인터페이스를 사용할 때 아무런 규칙 없이는 할 수 없기에 요청과 응답에 관해 '제대로 보내고 제대로 받을 수 있는' 일종의 규약이 존재하게 된다.
서버 API를 만드는 방법론 중에는 REST API
와 GraphQL API
이 있다.
(Representational State Transfer)
웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말한다. 이 방법론은 많은 Server API 들을 구성하기 위해 사용되었고, 현재에도 많이 사용되고 있다.
REST API에서는 HTTP 메서드를 이용해 서버와 통신한다. GET을 통해 웹 페이지나 데이터를 요청하고, POST로 새로운 글이나 데이터를 전송하거나 DELETE로 저장된 글이나 데이터를 삭제할 수 있다. 이처럼 클라이언트와 서버가 HTTP 통신을 할 때는 어떤 요청을 보내고 받느냐에 따라 메서드의 사용이 달라진다.
좋은 REST API를 작성하기 위해서는 4단계로 나뉘어진 REST 성숙도 모델이 있다. 그러나 모두 지키기에는 현실적인 한계가 있고 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있다.
Graph + Query Language의 줄임말로 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language(정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종)를 뜻하며 API를 위한 쿼리언어라고 할 수 있다.
그래프는 여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조를 뜻한다. 하나의 점은 노드(Node) 또는 정점(vertex)라고 표현하고 하나의 선은 간선(edge)라고 하는데 직접적인 관계일 때는 두 점 사이를 이어주는 선이 있고 간접적인 관계일 때는 몇 개의 점과 선에 걸쳐 이어진다. 이렇게 각 노드 간의 간선을 통해 특정한 순서에 따라 그래프를 재귀적으로 탐색할 수 있다(마인드맵 구조와 비슷해진다).
GraphQL에서는 모든 데이터가 그래프 형태로 연결되어 있다고 전제한다. 일대일로 연결된 관계도, 여러 계층으로 이루어진 관계도 모두 그래프이다. 단지 그 그래프를 누구의 입장에서 정렬하느냐(클라이언트가 어떤 데이터를 필요로 하느냐)에 따라 트리 구조를 이룰 수도 있다.
이를 통해 GraphQL은 클라이언트 요청에 따라 유연하게 트리 구조의 JSON 데이터를 응답으로 전송할 수 있다. 다시 말해 GraphQL은 REST API 방식의 고정된 자원이 아닌 클라이언트 요청에 따라 유연하게 자원을 가져올 수 있다는 점에서 엄청난 이점을 갖는다.
REST API는 엔드포인트가 각각 나뉘어져 있기 때문에 필요없는 데이터까지 제공하는 overfetch나 필요한 정보를 충분히 제공하지 못하는 underfetch가 발생하는 일이 잦다. 또한 자원의 크기와 형태를 서버에서 결정하기 때문에 클라이언트가 직접 데이터의 형태를 수정할 수 가 없고, 클라이언트 구조 변경 시 엔드포인트의 변경 또는 데이터 수정이 필요하다.
반면 GraphQL은 하나의 엔드포인트에 요청하고 이곳에 query나 mutation을 resolver 함수로 전달해 요청에 응답하기에 정확하게 필요한 정보를 받아내기 때문에 overfetch나 underfetch 현상이 일어나지도 않는다. 마지막으로 클라이언트 구조가 바뀌어도 필요한 데이터를 결정하는 주체가 클라이언트 이기 때문에 서버에도 지장이 없게 된다.
그러나 REST API보다 학습하기 어렵다는 단점이 있으며 캐싱이 훨씬 복잡한 점 그리고 고정된 요청과 응답만 필요할 경우에는 Query로 인해 요청의 크기가 RESTful API의 경우보다 더 커진다는 단점도 존재한다.