본문 바로가기
Frontend

RESTful api란?

by 프로그레머 2024. 3. 6.

 

RESTful api란?

 

 

RESTful API는 REST(Representational State Transfer) 원칙을 따르는 API를 의미한다

REST는 웹 상의 시스템 간에 통신을 위한 아키텍처 스타일로, 네트워크 아키텍처 원칙의 모음이다

2000년에 로이 필딩(Roy Fielding)의 박사 논문에서 처음 소개되었다

RESTful API를 통해 클라이언트와 서버 간에 데이터를 주고받을 때 HTTP 프로토콜을 사용하여 리소스를 처리한다

 

RESTful API의 핵심 원칙

  1. 클라이언트-서버 구조 (Client-Server Architecture)
    1. 클라이언트와 서버는 서로 독립적으로 분리되어 있어야 한다
    2. 이는 각각의 부분을 독립적으로 발전시킬 수 있게 해준다
  2. 무상태성 (Stateless)
    1. 각 요청은 독립적이어야 하며, 이전 요청의 정보를 서버가 유지하지 않는다
    2. 모든 요청은 자체적으로 충분한 정보를 가지고 있어야 한다
  3. 캐시 처리 가능 (Cacheable)
    1. RESTful API 응답은 캐시가 가능해야 한다
    2. 캐싱을 통해 클라이언트는 반복된 데이터 요청에 대해 서버가 아닌 캐시로부터 응답을 받을 수 있어 효율성을 높일 수 있다
  4. 계층화된 시스템 (Layered System)
    1. 클라이언트는 최종 서버와 직접 통신하지 않아도 된다
    2. 중간에 여러 계층(예: 로드 밸런서, 인증 서버 등)을 둘 수 있다
  5. 코드 온 디맨드 (Code on Demand, 선택적)
    1. 서버는 실행 가능한 코드를 클라이언트에 전송할 수 있으며, 이를 통해 클라이언트의 기능을 일시적으로 확장할 수 있다
      1. 클라이언트가 필요한 기능을 서버에서 받아 실행할 수 있어서, 클라이언트 측에서는 해당 기능을 구현할 필요 없이 서버가 제공하는 기능을 활용할 수 있다
  6. 일관적인 인터페이스 (Uniform Interface)
    1. 시스템 내 모든 컴포넌트가 정보를 전달하는 방식이 통일되어 있어야 한다
    2. 일관된 인터페이스는 리소스 식별, 자기 서술적 메시지, 하이퍼미디어(HATEOAS) 등을 포함한다

,  

RESTful API의 구성 요소

  • 리소스(Resource)
    • 서버에 저장된 데이터 항목 또는 서비스
    • 일반적으로 URI(Uniform Resource Identifier)를 통해 식별된다
      • 사용자 프로필, 게시물, 주문, 댓글 등이 리소스의 예시
      • 각 리소스는 고유한 URI를 가지고 있어야 함
      • 클라이언트는 이 URI를 사용하여 해당 리소스에 접근함
  • 메서드(Method)
    • 리소스에 대한 행동을 정의한다
    • 주로 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용한다
      • GET: 리소스를 가져오기 위해 사용
      • POST: 새로운 리소스를 생성하기 위해 사용
      • PUT: 기존의 리소스를 업데이트하기 위해 사용
      • DELETE: 리소스를 삭제하기 위해 사용
  • 표현(Representation)
    • 클라이언트와 서버 간에 교환되는 리소스의 상태다
    • JSON이나 XML 같은 형식을 사용한다
    • 클라이언트는 서버로부터 받은 표현을 해석하여 해당 리소스의 상태를 이해하고 처리할 수 있다
    • 서버로부터 받은 사용자 프로필 정보를 JSON 형식으로 표현된 데이터로 받아와 클라이언트 애플리케이션에서 이를 화면에 표시하는 등의 작업을 수행할 수 있다

 

RESTful API는 웹 서비스를 구축하기 위한 간단하고 직관적인 방법을 제공한다

이 아키텍처 스타일을 통해 개발자는 다양한 클라이언트(웹, 모바일, IoT 장치 등)에 서비스를 쉽게 제공할 수 있다

 

'Frontend' 카테고리의 다른 글

HTTP 메소드  (0) 2024.03.06
Context API란  (1) 2024.03.06
useEffect 와 useLayoutEffect 차이  (0) 2024.03.06
React-query  (0) 2024.03.06
렌더링 성능 향상 위해 어떻게 해야 하는가  (0) 2024.03.06