REST API란?

GwanMtCat·2023년 9월 14일
0

REST(Representational State Transfer) 란?

월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로

쉽게 말하면 HTTP를 잘 사용하기 위한 아키텍처 스타일을 말한다.


REST API란?

RESTful 한 API를 말한다, REST의 일련의 특징과 규칙 등을 지키는 API를 일컫는다.

로이 토마스 필딩이 쓴 논문에서 처음으로 등장한 개념


REST API의 특징

1. Uniform-Interface (일관된 인터페이스)

API에서 자원들은 각각의 독립적인 인터페이스를 가지고, 각각의 자원들이 URL을 통한 자원식별, 표현을 통한 자원조작, Self-descriptive messages, HATEOS 구조를 가지는 것을 말한다.

독립적인 인터페이스라는 것은 서로 종속적이지 않은 인터페이스를 말한다.
즉 한 인터페이스의 변경이 다른 인터페이스에서 동작에 영향을 주지 말아야 한다.

  • URL을 통한 자원식별

  • 표현을 통한 자원조작 (manipulation of resources through representations)

    • URL과 HTTP 표준 메서드(GET, POST, PUT, DELETE) 등을 통해 자원을 조회, 삭제 등 작업을 설명할 수 있는 정보가 담겨야 하는 것을 말한다.

      GET /books/1  // 책의 1번 페이지를 가져와라
      POST /books // body 에 담긴 정보로 책을 생성해라.
      PUT /books // body 에 담긴 정보로 책을 갱신해라.
      DELETE /books // 책 정보를 삭제해라.
  • Self-descriptive messages

    • HTTP 헤더에 타입을 명시하고, 각 메시지들은 MIME types에 맞춰 표현되어야 한다.
    • json 파일을 반환한다면, application/json 으로 명시해야 한다.
    • content-type : application/json
  • HATEOS (Hypermedia as the Engine of Application State)는 응답에 데이터뿐만 아니라 해당 데이터와 관련된 가능한 작업도 링크 형식으로 포함됩니다.
    보통은 href, links, link, url 속성 중 하나에 해당 데이터의 URl을 담아서 표기해야 한다.

2. Stateless

HTTP 자체가 Stateless 이기 때문에 HTTP를 이용하는 것만으로도 만족된다. 이는 REST API를 제공해주는 서버는 세션을 해당 서버쪽에 유지않는다는 의미이다.

3. Cacheable

HTTP는 아무런 로직을 구현하지 않더라도 자동적으로 캐싱이 된다. 사설캐시인 브라우저 캐시와 공유캐시인 프록시캐시가 있다. (응답이 304로 날아온다.)

4. Client-Server 구조

클라이언트와 서버가 서로 독립적인 구조를 가져야 한다. 이는 HTTP를 통해 가능한 구조이다. 서버에서 HTTP 표준만 지킨다면 웹에서는 그에 따른 화면이 잘 나타나게 된다. 서버는 API를 제공하고, 그 API에 맞는 비즈니스 로직을 처리하면 되며, 마찬가지로 클라이언트에서 HTTP로 받는 로직만 잘 처리하면 된다.

5. Layered System Architecture

계층구조로 나눠져 있는 아키텍처를 뜻한다. WEB 기반 서비스를 하면 보통 이러한 시스템을 구축하게 된다.


REST API의 6가지 URI 규칙

  • 동작은 HTTP 메소드로만 표현해야하고, URL에 해당 내용이 들어가면 안된다.
  • .jpg, .png 등 확장자는 표시 하지 말아야 된다.
  • 동사가 아닌 명사로만 표기해야 한다.
    • 유저가 책을 소유한다 라는 것을 표현하면 /users/{userId}/books/{bookNo} 형식으로 표현해야 한다.'
  • 계층적인 내용을 담고 있어야 한다. '/집/아파트/전세' 이런식으로 내려 가야한다.
  • 대문자가 아닌 소문자로만 쓰며 너무 길 경우에 바를 써야 할 경우, 언더바(_)가 아닌 그냥 바(-)를 쓴다.
  • HTTP 응답 상태 코드를 적재적소에 활용해야 한다.

참조
큰돌의터전, 제대로 이해하는 REST API

0개의 댓글