본문 바로가기
개발 지식/RESTful API

[개발 상식] REST API란?

by 머그워트 2023. 5. 14.
728x90

 

REST

Representational State Transfer의 약자.
다음 6가지의 제약조건을 따르는 API를 RESTful하다고 칭한다.

  1. Client-Server: 클라이언트-서버
  2. Stateless: 상태가 없음
  3. Cachable: 캐시되는 데이터
  4. Uniform Interface: 일관된 인터페이스
  5. Layered System: 레이어 시스템
  6. Code-On-Demand (Optional): 코드-온-디맨드

 

각 항목이 의미하는 것을 살펴 보자.

 

Client-Server

  • 리소스를 관리하는 서버가 있고, 클라이언트가 리소스 사용을 위해 네트워크를 통해서 서버에 접근하는 구조
  • 웹 애플리케이션이 이와 같은 구조이다.

 

Stateless

  • 클라이언트가 서버에 무언가를 요청할 때, 그 요청이 이전의 요청에 영향을 받지 않음
    • 예를 들어, 로그인 API 실행 후 글 등록 API를 실행할 때, 로그인 API에서 받아온 정보를 등록 API는 알지 못한다.
    • 로그인 상태를 유지하기 위해서는, 즉 stateful한 아키텍처가 되기 위해서는 매 API 요청 시마다 로그인 정보를 함께 보내야 한다.
    • 데이터의 변경 상태를 유지하기 위해서는 persistence에 상태를 저장한다.
  • HTTP가 stateless하므로 웹 애플리케이션도 기본적으로 stateless하다.

 

Uniform Interface

  • 리소스 접근 시의 인터페이스가 일관적이어야 한다.
    • URI의 일관성: A는 test.com/A 로 접근하고 B는 test22.com/B 로 접근하면 안 된다.
    • 리턴 타입의 일관성: test.com/A 는 JSON을 리턴하고  test.com/B는 HTML을 리턴하면 안 된다.
  • 리소스 접근 방식, 요청 형식, 응답 형식, URI, 요청 형태, 응답 형태가 일관적이어야 한다.
  • 서버의 응답에는 리소스를 수정하기 위한 충분한 정보가 있어야 한다. 예를 들어 Primary Key 등 고유값을 포함시켜야 한다.

 

Layered System

  • 클라이언트가 서버에 요청 시 여러 개의 레이어로 된 서버를 거칠 수 있다.
  • 클라이언트와 애플리케이션 사이의 레이어들은 요청/응답에 영향을 미치지 않으며, 클라이언트는 서버의 레이어가 존재하는지 알 수 없다.

 

Code-On-Demand

  • 선택 사항으로 꼭 지키지 않아도 된다.
  • 클라이언트는 서버에 코드를 요청할 수 있고, 서버가 리턴한 코드를 실행할 수 있다.

 

 

출처: 김다정, 『React.js, 스프링 부트, AWS로 배우는 웹 개발 101』, 에이콘출판주식회사(2021), p97-99.

728x90

댓글