[WEB] RESTful API

RESTful API

개요

RESTful 이란?

  • REST는 REpresentational State Trasfer의 약어로 웹을 이용할 때 제약 조건들을 정의하는 소프트웨어 아키텍처 스타일
  • REST 자체의 의미는 네트워크 아키텍쳐 원리(규칙)의 모음이고, 이를 따르는 시스템을 RESTful 이라고 함
  • REST를 따르는 옹호자들은 스스로를 ‘RESTafrians’ 이라고 함.

Restful 구성요소

HTTP URI을 통해 리소스를 명시하고 HTTP Method를 통해서 리소스에 대한 CRUD를 제공.

  1. 자원(Resource) : HTTP URI
  2. 자원에 대한 행위: HTTP Method
  3. 자원에 대한 표현 : Representations

HTTP Method

HTTP Method는 다음과 같이 제공된다.

Method 설명
GET 리소스 조회
POST 리소스 생성
PUT 리소스 전체 수정
PATCH 리소스 부분 수정
DELETE 리소스 삭제

REST 아키텍쳐 규칙

REST 아키텍쳐를 따르는 RESTful 시스템은 다음과 같은 규칙을 따라야 한다.

  1. Stateless : 각 요청 간 Client Context가 서버에 저장되어서는 안된다.
  2. Cacheable: Client의 응답을 캐싱할 수 있어야 한다.
  3. Layered System: 클라이언트는 보통 대상 서버에 직접 연결되었는지, 중간서버를 통해 연결되었는지 알 수 없다. 중간 서버는 로드밸런싱이나 공유 캐쉬 기능을 제공함으로써 시스템 확장성을 향상시키는데 유용하다.
  4. Code on Demand(optional) : Java applet, javascript 제공을 통해 Server에서 Client의 로직을 실행할 수 있도록 기능 확장할 수 있다.
  5. Client-Server Architecture : 아키텍쳐를 단순화 시키고 작은 단위로 분리함으로써 client-server 각 파트가 독립적으로 개선될 수 있다.
  6. Uniform Interface : 시스템의 각 부분들이 독립적으로 발전할 수 있도록 단순화하고 분리한다. 이를 위해서 4가지 규약이 있다.
    • 요청에서 리소스에 대한 식별이 가능해야 한다.
    • Representation을 통해 리소스 수정이 가능해야 한다.
    • 자체적으로 설명적인 메세지를 가져야한다.
    • 어플리케이션 엔진으로의 하이퍼미디어(HATEOAS)

REST API URI 설계 규칙

  1. 소문자를 사용한다.

    http://www.example.com/fruits/Banana (X)
    http://www.example.com/fruits/banana (O)
    
  2. 언더바(_) 대신에 하이픈(-)을 사용한다.

    http://www.example.com/tropical_fruits/banana (X)
    http://www.example.com/tropical-fruits/banana (O)
    
  3. 마지막에 슬래시(/)를 포함하지 않는다.

    http://www.example.com/fruits/banana/ (X)
    http://www.example.com/fruits/banana  (O)
    
  4. 행위(HTTP Method)를 포함시키지 않는다.

    POST http://www.example.com/fruits/post/banana (X)
    POST http://www.example.com/fruits/banana     (O)
    
  5. 파일 확장자는 URI에 포함시키지 않는다.

    http://www.example.com/fruits/banana.jpg    (X)
    http://www.example.com/fruits/banana       (O)
    
  6. 자원에는 형용사, 동사가 아닌 명사를 사용하며 컨트롤 자원을 의미하는 경우 동사를 허용한다.

    http://www.example.com/fruits/creating     (X)
    http://www.example.com/fruits/create      (O)
    
  7. URI에 사용되는 영어를 복수형으로 사용한다.

    http://www.example.com/fruit/banana      (X)
    http://www.example.com/fruits/banana     (O)