REST API (RESTfull API)가 뭘까?

onady·2022년 4월 18일
0

REST API란?

REST는 Representational State Transfer라는 용어의 약자로 웹의 장점을 최대한 활용할 수 있도록 만들어진 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다.
즉 REST란
1. HTTP URI를 통해 자원을 명시하고
2. HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미합니다.

CRUD란 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create, Read, Update, Delete를 묶어서 일컫는 말로 REST에서 CRUD는 다음과 같다

  • Create : 데이터 생성(POST)
  • Read : 데이터 조회(GET)
  • Update : 데이터 수정(PUT)
  • Delete : 데이터 삭제(DELETE)

REST는 아래에서 설명할 제약조건(특징)들을 가지고 있는데 이 모든 제약조건이 지켜진 형태를 REST “-ful” 하다고 표현한다.

REST 아키텍처에 적용되는 6가지 제약 조건

1. Uniform Interface

  • 간단하고 잘 파악할 수 있도록 하기 위해 일관적인 인터페이스로 분리되어야 한다
  • 4가지 제약조건
    • Identification Of Resources
      • 리소스는 유일하게 식별되어야 하기 때문에 URI와 HTTP Method를 이용해 동작을 구분한다.
    • Manipulation of Resources through Representation
      • HTTP Method를 이용해 동작을 표현한다.
    • Self - Descriptive Messages
      • Request/Response 메세지 스스로가 어떤 동작을 하는지 설명이 되어야한다.
      • Request 메세지는 HTTP Method를 이용해 어떤 동작을 하는지 설명이 가능하다.
      • Response 메세지는 HTTP Status Code, Header를 이용해 응답에서 어떤 상태이고, 어떤 응답을 했는지 설명이 가능하다.
    • Hypermedia As The Engine Of Application State (HATEOAS)
      • 하이퍼링크를 이용해서 애플리케이션 상태를 전이 하는것을 의미한다.
      • 리소스 Request에 대한 Response에 다음 Action에 대한 URI를 함께 리턴해줌으로써 요청 URI가 변경되었을 시에 클라이언트가 코드를 고치지 않고, 서버에서 동적으로 생성한 URI를 사용하여 클라이언트 코드를 변경하지 않도록 해줄 수 있다.
      200 OK 
      {
          "id" : "1", 
          "name" : "zayson", 
          "links" : {
              "grade" : "/members/1/grade",     // 등급을 수정하는 ACTION URI 전달
              "exp" : "/members/1/exp"          // 경험치를 수정하는 ACITON URI 전달
          }
      }

2. Stateless

  • 클라이언트에서 서버로의 각 요청에는 그 요청을 이해하는 데 필요한 모든 정보가 포함되어야 한다.
  • 각 요청 간 클라이언트의 콘텍스트가 서버에 저장되어서는 안 된다. 따라서 세션의 정보는 전적으로 클라이언트가 가지고 있어야 한다.
  • 예를들면 로그인 했다는 세션 유지가 필요하다면 그 정보 또한 클라이언트가 해당 정보를 가지고 서버에 전달해야한다.(ex. JWT사용)

3. Cacheable

  • HTTP가 가진 캐싱 기능이 적용 가능하다.
  • 서버에서 Response한 리소스에 대해 캐싱을 함으로 써, 이후 REST 서버로 동일한 Request 전에 캐시를 확인하여 REST 서버의 트랜잭션을 줄여줄 수 있고, 리소스에 대해 Response 시간을 줄일 수 있다.

4. Layered System

클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지를 알 수 없다. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용하다.

5. optional

자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.

6. Client-Server

아키텍처를 단순화시키고 작은 단위로 분리(decouple)함으로써 클라이언트-서버의 각 파트가 독립적으로 개선될 수 있도록 해준다..

참조

https://meetup.toast.com/posts/92
https://ko.wikipedia.org/wiki/REST
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
https://sabarada.tistory.com/26

0개의 댓글