REST API , GraphQL

리선맨·2023년 11월 2일

REST API, GraphQL

1. API (Application Programming Interface)

API는 컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 즉, 프로그램들이 서로 소통하는 방법이다.
구글 맵 API, 카카오 비전 API 등 기존에 있는 응용 프로그램을 통해서 데이터를 제공받거나 기능을 사용하고자 할 때 사용하는 인터페이스 및 규격 을 말한다.


2. REST API

2.1 REST란?

"REpresentational State Transfer" 의 약자로,
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것.
HTTP *URI를 통해 자원을 명시하고 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 해당 자원에 대한 *CRUD를 적용하는 것을 말한다.

*자원 : 문서, 그림, DB, 이미지, 동영상, 해당 소프트웨어 자체 등 모든 자료를 의미한다.
*URI : 인터넷 상의 자원을 식별하기 위한 문자열의 구성이다.
*CRUD : Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다.

2.2 REST API란?

REST 원칙을 적용하여 서비스 API를 설계한 것을 말한다.
각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다는 것이 REST API의 특징이다.

2.3 REST API의 설계 규칙

  1. 자원에는 형용사, 동사가 아닌 명사를 사용한다.
❌ https://velog.io/@kor-seonwoo/duplicating
⭕ https://velog.io/@kor-seonwoo/duplicate
  1. 슬래시(/)로 계층 관계를 표현하고 마지막에 슬래시를 포함하지 않는다.
❌ https://velog.io/@kor-seonwoo/notice/
⭕ https://velog.io/@kor-seonwoo/notice
  1. 언더바(_) 대신 하이픈(-)을 사용한다.
❌ https://velog.io/@kor-seonwoo/notice/first_notice
⭕ https://velog.io/@kor-seonwoo/notice/first-notice 
  1. URI는 소문자로만 구성한다.
❌ https://velog.io/@kor-seonwoo/notice/firstNotice
⭕ https://velog.io/@kor-seonwoo/notice/firstnotice 
  1. 행위를 포함하지 않는다.
❌ POST https://velog.io/@kor-seonwoo/notice/post/1
⭕ DELETE https://velog.io/@kor-seonwoo/notice/1 
  1. 파일 확장자는 URI에 포함하지 않는다.
❌ https://velog.io/@kor-seonwoo/notice/photo.jpg
⭕ https://velog.io/@kor-seonwoo/notice/photo
  1. HTTP 응답 상태 코드 사용
    클라이언트는 해당 요청에 대한 실패, 처리완료 또는 잘못된 요청 등에 대한 피드백을 받아야 한다.

2.4 RESTful API란?

RESTfulREST의 설계 규칙을 잘 지켜서 설계된 API를 의미한다.
즉, REST의 원리를 잘 따르는 시스템을 RESTful이란 용어로 지칭한다.


3. GraphQL

3.1 GraphQL이란?

GraphQL은 클라이언트와 서버 간의 데이터 통신을 위한 쿼리 언어이다. 클라이언트가 필요한 데이터를 요청할 때 원하는 구조로 한 번에 받을 수 있도록 설계된 쿼리 언어이다.

3.2 GraphQL의 특징

  • 유연한 데이터 요청
    필요한 데이터를 GraphQL 쿼리 문법을 사용하여 직접 지정할 수 있고, 여러 데이터를 한 번의 요청으로 받을 수 있다.
  • 타입 시스템
    서버가 제공하는 데이터의 타입과 구조를 사전에 정의할 수 있다.
  • 문서화 및 디버깅
    자체적인 문서화 기능을 제공하며, 오류 메시지를 통해 디버깅을 용이하게 한다.

3.3 GraphQL 쿼리 예시

{
  alluser {
    name
    email
  }
}
{
  user(id: 1) {
    name
    email
    posts {
      title
      content
    }
  }
}

3.4 GraphQL 서버와의 통신

클라이언트는 GraphQL 쿼리를 서버로 전송하고, 서버는 해당 쿼리를 해석하여 필요한 데이터를 응답한다.

3.5 GraphQL을 쓰는 이유

  • 타입 안정성 보장
    타입 시스템을 통해 데이터의 구조와 타입을 명확하게 정의할 수 있으므로, 데이터의 안정성을 보장합니다.
  • OverfetchingUnderfetching 해결로 인한 데이터 효율 향상
    클라이언트가 필요한 데이터만을 요청하고 응답받기 때문에, 네트워크 효율이 향상된다.

Overfetching
내가 필요로 하는 데이터보다 더 많은 데이터를 fetch하는 것.

  • 일반적인 REST API의 경우 내가 필요로 하는 데이터를 콕콕 찝어 요청하는게 아닌 data 전부를 받아야한다.
  • 하지만 GraphQL을 사용하면 내가 필요로 하는 데이터를 콕콕 찝어 요청할 수 있고 응답 또한 내가 원하는 data만을 받을 수 있다. 이러한 특성으로 Overfetching 문제를 해결할 수 있다.

Underfetching
내가 필요로 하는 데이터보다 적게 데이터를 fetch하는 것.

  • 한번의 reqeust로는 내가 필요로 하는 데이터를 얻지 못하고 여러번의 reqeust로 원하는 data를 얻는 것.
  • 이것 또한 graphQL을 사용하면 단일 reqeust만으로도 내가 원하는 데이터를 콕콕 찝어 응답 받을 수 있다.

4. REST API와 GraphQL의 차이점

데이터 요청과 응답:
REST API서버가 데이터 구조를 결정하고, 클라이언트는 서버가 제공하는 데이터를 받는다.
반면, GraphQL클라이언트가 필요한 데이터의 구조를 결정하고, 서버는 요청한 데이터를 그대로 응답한다.

요청의 수:
REST API각 리소스에 대한 별도의 엔드포인트가 필요하므로, 여러 데이터를 받기 위해서는 여러 번의 요청이 필요하다.
반면, GraphQL한 번의 요청으로 여러 데이터를 받을 수 있다.

버전 관리:
REST API데이터 구조의 변경이 필요할 때 새로운 버전의 API를 만들어야 한다.
반면, GraphQL클라이언트가 데이터의 구조를 결정하므로, 서버의 데이터 구조가 변경되어도 클라이언트에 영향을 미치지 않는다. 따라서 별도의 버전 관리가 필요하지 않다.


References

profile
프론트엔드 개발 공부중인 주니어 개발자의 복습노트

1개의 댓글

comment-user-thumbnail
2024년 9월 20일

잘보고갑니다!!

답글 달기