API는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 즉, 프로그램들이 서로 소통하는 방법이다.
구글 맵 API, 카카오 비전 API 등 기존에 있는 응용 프로그램을 통해서 데이터를 제공받거나 기능을 사용하고자 할 때 사용하는 인터페이스 및 규격 을 말한다.
"REpresentational State Transfer" 의 약자로,
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것.
HTTP *URI를 통해 자원을 명시하고 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원에 대한 *CRUD를 적용하는 것을 말한다.
*자원 : 문서, 그림, DB, 이미지, 동영상, 해당 소프트웨어 자체 등 모든 자료를 의미한다.
*URI : 인터넷 상의 자원을 식별하기 위한 문자열의 구성이다.
*CRUD : Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다.
REST 원칙을 적용하여 서비스 API를 설계한 것을 말한다.
각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다는 것이 REST API의 특징이다.
자원에는 형용사, 동사가 아닌 명사를 사용한다.❌ https://velog.io/@kor-seonwoo/duplicating
⭕ https://velog.io/@kor-seonwoo/duplicate
슬래시(/)로 계층 관계를 표현하고 마지막에 슬래시를 포함하지 않는다.❌ https://velog.io/@kor-seonwoo/notice/
⭕ https://velog.io/@kor-seonwoo/notice
언더바(_) 대신 하이픈(-)을 사용한다.❌ https://velog.io/@kor-seonwoo/notice/first_notice
⭕ https://velog.io/@kor-seonwoo/notice/first-notice
URI는 소문자로만 구성한다.❌ https://velog.io/@kor-seonwoo/notice/firstNotice
⭕ https://velog.io/@kor-seonwoo/notice/firstnotice
행위를 포함하지 않는다.❌ POST https://velog.io/@kor-seonwoo/notice/post/1
⭕ DELETE https://velog.io/@kor-seonwoo/notice/1
파일 확장자는 URI에 포함하지 않는다.❌ https://velog.io/@kor-seonwoo/notice/photo.jpg
⭕ https://velog.io/@kor-seonwoo/notice/photo
HTTP 응답 상태 코드 사용RESTful은 REST의 설계 규칙을 잘 지켜서 설계된 API를 의미한다.
즉, REST의 원리를 잘 따르는 시스템을 RESTful이란 용어로 지칭한다.
GraphQL은 클라이언트와 서버 간의 데이터 통신을 위한 쿼리 언어이다. 클라이언트가 필요한 데이터를 요청할 때 원하는 구조로 한 번에 받을 수 있도록 설계된 쿼리 언어이다.
{
alluser {
name
email
}
}
{
user(id: 1) {
name
email
posts {
title
content
}
}
}
클라이언트는 GraphQL 쿼리를 서버로 전송하고, 서버는 해당 쿼리를 해석하여 필요한 데이터를 응답한다.
Overfetching
내가 필요로 하는 데이터보다 더 많은 데이터를 fetch하는 것.
- 일반적인 REST API의 경우 내가 필요로 하는 데이터를 콕콕 찝어 요청하는게 아닌 data 전부를 받아야한다.
- 하지만 GraphQL을 사용하면 내가 필요로 하는 데이터를 콕콕 찝어 요청할 수 있고 응답 또한 내가 원하는 data만을 받을 수 있다. 이러한 특성으로 Overfetching 문제를 해결할 수 있다.
Underfetching
내가 필요로 하는 데이터보다 적게 데이터를 fetch하는 것.
- 한번의 reqeust로는 내가 필요로 하는 데이터를 얻지 못하고 여러번의 reqeust로 원하는 data를 얻는 것.
- 이것 또한 graphQL을 사용하면 단일 reqeust만으로도 내가 원하는 데이터를 콕콕 찝어 응답 받을 수 있다.
데이터 요청과 응답:
REST API는 서버가 데이터 구조를 결정하고, 클라이언트는 서버가 제공하는 데이터를 받는다.
반면, GraphQL은 클라이언트가 필요한 데이터의 구조를 결정하고, 서버는 요청한 데이터를 그대로 응답한다.
요청의 수:
REST API는 각 리소스에 대한 별도의 엔드포인트가 필요하므로, 여러 데이터를 받기 위해서는 여러 번의 요청이 필요하다.
반면, GraphQL은 한 번의 요청으로 여러 데이터를 받을 수 있다.
버전 관리:
REST API는 데이터 구조의 변경이 필요할 때 새로운 버전의 API를 만들어야 한다.
반면, GraphQL은 클라이언트가 데이터의 구조를 결정하므로, 서버의 데이터 구조가 변경되어도 클라이언트에 영향을 미치지 않는다. 따라서 별도의 버전 관리가 필요하지 않다.
References
잘보고갑니다!!