[Code-State] SECTION-2 Network RestFul API

유형찬·2022년 10월 4일
0

Code States

목록 보기
11/21

RESTful API 란?

REST는 Representational State Transfer의 약자로,
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일을 뜻한다.

REST는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해
해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

쉽게 말해서 REST는 자원을 정의하고 자원에 대한 행위를 정의하는 것이다.
HTTP URI만을 보고도 사람이 쉽게 이해할 수 있도록 만들어야 한다.

REST의 구성 요소

REST는 다음과 같은 구성 요소로 구성된다.

  • 자원(Resource) - URI
  • 행위(Verb) - HTTP Method
  • 표현(Representations)

자원(Resource) - URI

모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
Client는 URI를 이용하여 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.

예시 /users

행위(Verb) - HTTP Method

HTTP 프로토콜의 Method를 사용한다.

  • GET : 자원을 조회하기 위한 Method
  • POST : 자원을 생성하기 위한 Method
  • PUT : 자원을 수정하기 위한 Method
  • DELETE : 자원을 삭제하기 위한 Method
  • PATCH : 자원의 부분 수정을 위한 Method
  • HEAD : 헤더 정보 조회를 위한 Method
  • OPTIONS : CORS(Cross-Origin Resource Sharing) 통신을 위한 Method

표현(Representations)

Client가 Server로 요청을 보내면 Server는 요청에 대한 응답을 보낸다.
이때 응답에 포함되는 내용은 Resource의 상태 정보이다.

이러한 Resource의 상태 정보는 JSON, XML, TEXT, RSS 등 여러 형태로 나타낼 수 있다.
이러한 표현들을 REST에서는 Representation이라고 한다.

예시 JSON

{
    "id": 1,
    "name": "홍길동",
    "age": 20
}

REST의 특징

REST는 다음과 같은 특징을 가진다.

  • Server-Client(서버-클라이언트 구조)
  • Stateless(무상태)
  • Cacheable(캐시 처리 가능)
  • Layered System(계층화)
  • Code on demand (자바 애플릿, 자바스크립트, 클라이언트 측 스크립트 사용 가능)
  • Uniform Interface(인터페이스 일관성)
  • Self-descriptiveness(자체 표현 구조)
  • Hypermedia as the Engine of Application State(HATEOAS)

위와 같은 특징을 가지도록 전부 지켜야 하는 것은 아니며, RESTful하다고 할 수 있는 정도는 개발자의 주관이다.

REST API 계층

리차스든의 REST 아키텍처 스타일은 다음과 같다.
계층 별로 나누어서 설명하겠다.
일단 계층은 다음과 같이 구성 된다.

Level 0 POX Swamp

REST API를 설계할 때 가장 기본적인 형태이다.

0단계 에서는 단순히 HTTP Method만 사용 한다.

이를 REST API라고 부르지 않지만 0단계는 REST API를 설계할 때 가장 기본적인 형태이다.

Level 1 URI

1단계 에서는 URI를 사용한다. 모든 자원은 개별 리소스에 맞는 엔드 포인트를 사용해야 하고
받은 정보에 대한 정보를 응답으로 전달해야한다.

Level 2 HTTP Verbs

HTTP Verbs는 HTTP 프로토콜의 Method를 사용하는 것을 의미한다.

HTTP Method에 맞게 자원을 처리하고 응답을 전달한다.

POST 일 때 : 자원을 생성한다.
GET 일 때 : 자원을 조회한다.
PUT 일 때 : 자원을 수정한다.
DELETE 일 때 : 자원을 삭제한다.
FETCH 일 때 : 자원을 일부 수정한다.

위와 같은 행위 일 때 각각 로직에 맞는 HTTP Method를 사용한다.

Level 3 HATEOAS

HATEOAS는 Hypermedia As The Engine Of Application State의 약자로,
REST API를 설계할 때 자원에 대한 상태를 전달하는 방식이다.

HATEOAS는 자원에 대한 상태를 전달하는 방식이다.

예를 들어, 자원을 생성하고 조회하는 API가 있다고 하자.

자원을 생성하는 API는 다음과 같다.

{
    "id": 1,
    "name": "홍길동",
    "age": 20
}

자원을 조회하는 API는 다음과 같다.

{
    "id": 1,
    "name": "홍길동",
    "age": 20,
    "links": [
        {
            "rel": "self",
            "href": "http://localhost:8080/api/v1/user/1"
        },
        {
            "rel": "update",
            "href": "http://localhost:8080/api/v1/user/1"
        },
        {
            "rel": "delete",
            "href": "http://localhost:8080/api/v1/user/1"
        }
    ]
}

자원을 조회하는 API는 자원의 상태를 전달하고, 자원의 상태를 변경할 수 있는 링크를 전달한다.

profile
rocoli에요

0개의 댓글