REST

  • REST: Representational State Transfer의 줄임말.

  • 표현 방식

    • 자원: URL

    • 행위: HTTP Method

    • 표현: 응답

  • 자원에 고유한 URIUniform Resource Identifier를 할당함으로써 표현력 있는 API를 정의하기 위한 아키텍처

representation

  • 이거보고 정리

  • 서버가 보내준 '것’은 '리소스’가 아니다. 'representation data’이다.

  • GET 메서드가 하는 일

    • 'target resource’에 대해서 현재 선택된 'representation' 하나를 전달하는 것.

  • 'target resource’는 uri가 가르키는 리소스

  • 'representation’은 어떤 리소스의 특정 시점의 상태를 반영하고 있는 정보.

  • representation은 representation data와 representation metadat로 구성됨.

HATEOAS

  • Hypermidia As The Engine Of Application State

  • REST API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것

  • https://spring.io/projects/spring-hateoas

조건

Uniform Interface

stateless

Stateful

  • 서버사이드에 클라이언트와 서버의 동작, 상태정보를 저장하는 형태

  • 세션 상태에 기반하여 서버의 응답이 달라짐

  • 서버와 클라이언트간 세션의 상태에 기반하여 클라이언트에게 응답을 보낸다.

  • ex) TCP

Stateless

  • 서버사이드에 클라이언트와 서버의 동작, 상태정보를 저장하지 않는 형태

  • 서버의 응답이 클라이언트와의 세션 상태와 독립적임

  • 떼로는 DB를 통해 상태를 저장함

  • ex) UDP

  • 유저의 엔티티 데이터에 따라 API 응답이 달라진다 → 이것은 여기서 말하는 stateful은 아닌 것 같음

Layered System

Cacheable

온디맨드 코드

규칙

  • URL 경로는 소문자 (RFC 3986 참고)

  • URI에 밑줄 말고 하이픈 사용

  • URI 마지막에 슬래시 포함하지 않음

  • 파일 확장자는 URI에 포함하지 않음 → 헤더

  • URI는 명사

  • 표현 방법

    • has 관계를 표현할 때: /users/{id}/devices

    • 서브 시소스를 명시적으로 표현하는 방법: /users/{id}/likes/devices

  • document, collection 표현 방법

    • document: 문서/객체

    • collection: 문서의 집합/객체의 집합, 복수로 표현

    • 모두 리소스로 URI에 표현

    • /sports/soccer/players/13: sports, players 컬렉션, soccer 도큐먼트

HTTP Methods

GET

  • 리소스 조회

POST

  • 리소스 생성, create

PUT

  • 리소스 수정(엎어치기?, 전체 교체), replace

PATCH

  • 리소스 수정(덮어쓰기, 일부 수정), modify

DELETE

  • 리로스 삭제

Response

Response State Code

2xx

  • 200: 정상

  • 201 Created: 성공적으로 리소스 생성

  • 202 Accepted: 요청은 성공적으로 접수되었으나 처리는 진행중이거나 시작전을 나타냄

    • polling, callback, websocket?, sse?

  • 204 No Content

4xx

  • 400

  • 401 Unauthorized: 인증 실패

  • 403 Forbidden: 리소스는 존재하지만, 권한 없음

  • 404 Not Found: 리소스 없음

  • 405 Method Not Allowed: 사용 불가능한 method

5xx

  • 500: 서버 문제

References