REST API란 뭘까?

REST API란 뭘까?

생성일
Oct 27, 2024 03:55 PM
최종 편집 일시
Last updated October 27, 2024
태그
CS

RESTful?

REST API는 RESTful한 API를 뜻한다.
RESTful은 일련의 특징과 규칙 등을 지키는 것을 말한다.
2000년에 Roy Thomas Fielding이 쓴 논문에서 처음 등장했다고 한다.
 

특징

  1. Uniform-Interface
    1. API에서 자원들은 각각의 독립적인 인터페이스를 가지며 각각의 자원들이 url 자원식별, 표현을 통한 자원조작, Self-descriptive messages, HATEOAS 구조를 가지는 것을 뜻한다.
      1. 예를 들어 HTTP1 → 1.1 → 2.0 → 3.0 으로 기술이 발전했다고 해서 어떤 웹사이트가 동작하지 않는 일이 일어나지 않는다는 것이 독립적인 인터페이스를 가진다고 볼 수 있다.
    2. url 자원 식별
      1. 자원은 url로 식별되어야 한다.
    3. 표현을 통한 자원조작
      1. url과 GET, DELETE 등 HTTP 표준메서드 등을 통해 자원을 조회, 삭제 등 작업을 설명할 수 있는 정보가 담겨야 한다는 뜻.
    4. Self-descriptive messages
      1. HTTP Header에 타입을 명시하고 각 메시지들은 MIME types에 맞춰 표현되어야 한다.
      2. 예를들어 .json을 반환한다면 application/json이라고 명시해주는 것.
      3. MIME types는 문서, 파일 등의 특성과 형식을 나타내는 표준이다.
    5. HATEOAS 구조
      1. Hypermedia as the Engine of Application State
      2. 하이퍼링크에 따라 다른 페이지를 보여줘야 하며 데이터마다 어떤 URL에서 원했는지 명시해주어야 한다는 뜻.
      3. 보통 href, links, link, url 속성 중 하나에 해당 데이터의 URL을 담아서 표기해야 한다.
  1. Stateless
    1. HTTP 자체가 Stateless이기 때문에 HTTP를 이용하는 것 만으로도 충족된다.
  1. Cacheable
    1. HTTP는 기본적으로 캐싱이 된다.
    2. GET 메서드에 한정해서 캐싱이 되며 Cache-Control:max-age=100 이런식으로 한정된 시간을 정할 수 있다.
    3. GET 응답 이후에 새로고침을 하면 304 상태코드를 볼 수 있고 원래 있던 js, css 이미지 등을 불러온다.
    4. 캐싱된 데이터가 유효한지 판단하기 위해 Last-modified, Etag라는 헤더값을 쓴다. Etag는 전달되는 값에 태그를 붙여서 캐싱되는 자원인지를 확인해주는 것이다.
  1. Client-Server 구조
    1. 클라이언트와 서버가 서로 독립적인 구조를 가져야 한다.
    2. 서버는 그저 API를 제공하고 클라이언트는 HTTP로 받는 로직만 잘 처리하면 된다는 뜻이다.
  1. Layered System
    1. 웹 기반 서비스를 하면 계층구조로 나눠져 있는 아키텍쳐가 된다.

REST API의 URI 규칙

  1. 동작은 HTTP 메서드로만 해야 하고 url에 해당 내용이 들어가면 안된다.
    1. GET, PUT, PATCH, DELETE 등을 쓸 때 예를 들어 DELETE를 쓴다고 하면 /user/delete/1 이런식으로 쓰면 안된다는 것이다.
  1. .jpg, .png 등 확장자 표시는 하면 안 된다.
  1. 동사가 아닌 명사로만 표기해야 한다. 예를 들어 유저가 소유한 책을 조회한다고 하면 /user/{userid}/books 이런식으로 해야 한다.
  1. 계층적인 내용을 담고 있어야 한다. /user/major/level 처럼 계층이 있어야 한다.
  1. 대문자가 아닌 소문자로만 쓰며 너무 길 경우에는 언더바(_)가 아니라 바(-)를 써야 한다.
  1. HTTP 응답 상태코드를 적재적소에 활용해야 한다.