[Spring] REST API

류넹·2024년 3월 26일
1

Spring

목록 보기
49/50

❓ REST API

  • REST : Representation State Transfer의 약자
  • 자원을 이름(자원에 대한 표현)으로 구분하여 해당 자원의 상태(자원의 정보)를 주고 받는 방식의 소프트웨어 아키텍처
    * Representation : 자원의 표현, 요청 URI로 표현
    * State : 자원의 현재 상태
  • HTTP URI를 통해 자원을 명시한다.
    * URL : 자원이 실제로 존재하는 위치
    * URI : 자원의 위치뿐만 아니라 자원에 대한 고유 식별자로서, URL을 포함하는 상위 개념
  • HTTP Method (GET, POST, PUT, DELETE)을 통해 해당 자원에 대한 CRUD Operation을 명시한다.
  • 웹의 모든 자원에 대해서 고유한 ID(HTTP 요청 URI)를 부여한다.




👥 등장배경

  • 단순하게 하나의 브라우저만 지원하던 방식 -> 멀티 플랫폼, 멀티 디바이스 등장
  • 플랫폼에 맞춰서 새로운 서버 애플리케이션을 개발하는 대신, 범용적으로 사용성을 보장하는 새로운 서버 애플리케이션 디자인이 필요해졌다.

< 단순하게 하나의 브라우저만 지원하던 시대 >

  • JSP, ASP, PHP 등을 이용해서 PC 브라우저에 표시할 HTML을 동적으로 생성해서 응답으로 보냈다.

< 멀티 플랫폼, 멀티 디바이스 시대 >

  • 서버 개발자는 클라이언트를 고려할 필요 없이 클라이언트에서 읽고 분석하기 용이한 XML, JSON 형태의 데이터를 제공하는 메시지 기반으로 개발한다.




✔️ REST의 구성

  • 자원의 이름 (Resource)
    • 모든 자원에 고유한 ID가 존재한다.
    • 자원을 구별하는 ID는 /user/1과 같은 HTTP URI다.
  • 자원에 대한 행위 (Verb)
    • HTTP 프로토콜의 메소드를 사용해서 지정한다.
  • 자원의 표현 (Representation of Resource)
    • REST에서 하나의 자원의 JSON, XML 형태로 표현된다.


✔️ REST의 특징

  • Uniform (유니폼 인터페이스)
    • URI로 지정한 리소스에 대한 조작이 통일된 인터페이스로 수행하는 아키텍처 구조
  • Stateless (무상태성)
    • REST는 무상태성을 가진다.
    • 세션정보나 쿠키정보를 별도로 저장하고 관리하지 않는다.
    • API 서버로 들어오는 요청만을 단순히 처리하기만 하기 때문에 서비스의 자유도가 높고 구현이 단순하다.
  • Cacheable (캐시 기능)
    • HTTP가 가진 캐싱 기능을 적용할 수 있다.
  • Self-descriptiveness (자체 표현 구조)
    • REST API 메시지는 쉽게 이해할 수 있는 자체 표현 구조로 되어 있다.
  • Client-Server 구조
    • 서버와 클라이언트에서 개발할 내용이 명확하게 구분되어 있고, 서로간의 의존성이 낮다.
  • 계층형 구조
    • REST API 서버는 다중 계층으로 구성될 수 있다.
    • REST API 서버는 보안, 로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다.




📌 REST API 디자인 규칙

1. URI로 자원의 이름을 표현한다.

URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다 명사를 사용한다.)

  • GET /members/delete/1
    • 유효하지 않은 URI, URI에 행위를 나타내는 동사는 적합하지 않다.

  • DELETE /member/1
    • 유효한 URI, 회원정보 1(회원아이디)를 삭제한다.

2. HTTP Method로 자원에 대한 행위를 표현한다.

HTTP MethodURIO/X
회원정보 조회GET/member/show/1X
GET/member/1O
----------------------------------------------------
회원정보 삭제GET/member/delete/1X
DELETE/member/1O
----------------------------------------------------
회원정보 수정POST/member/1X
PUT/member/1O
----------------------------------------------------
회원정보 추가POST/memberO


* URI 설계 시 주의사항




⚠️ REST API의 HTTP 응답코드

응답코드의미
200클라이언트의 요청을 성공적으로 수행하였음
201클라이언트가 리소스의 생성을 요청, 해당 리소스를 성공적으로 생성하였음
(POST 요청을 통한 리소스 생성 시 응답코드)
400클라이언트의 요청이 부적합할 때
401클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때
403클라이언트의 요청을 거부할 때
404클라이언트가 요청한 리소스가 존재하지 않을 때
405클라이언트가 요청한 요청방식이 지원하지 않을 때
500클라이언트의 요청을 처리하는 중 서버 오류가 발생했을 때
profile
학습용 커스터마이징 간단 개발자 사전

0개의 댓글