REST와 API 디자인 가이드

1 분 소요

Representational State Transfer

  • HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP 메서드를 통해 해당 자원에 대한 CRUD 동작을 적용하는 정보 전달 방식입니다.
  • REST는 HTTP를 사용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다.

REST API

REST 기반으로 서비스 API를 구현한 것을 REST API라고 합니다.

RESTful

REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위한 용어로, REST API를 제공하는 웹 서비스를 ‘RESTful’ 하다고 말할 수 있습니다.

REST의 구성

자원

  • 모든 자원에 고유한 id가 존재하고, 이 자원은 서버에 존재합니다.
  • 자원을 구별하는 id는 ‘/groups/group_id’와 같은 HTTP URI입니다.
  • 클라이언트는 URI를 이용해서 자원(URI)을 지정하고 해당 자원의 상태(정보)에 대한 조작을 서버에 요청합니다.

행위

  • HTTP 프로토콜의 메서드를 사용합니다.
  • HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE, OPTIONS, TRACE, CONNECT, HEAD 총 9개가 있습니다. 여기서 REST에서 주로 사용하는 메서드는 GET, POST, PUT, PATCH, DELETE입니다.
  • Create, 자원의 생성은 POST 메서드를 사용합니다.
  • Read, 자원의 조회는 GET 메서드를 사용합니다.
  • Update, 자원의 (전체)수정은 PUT 메서드를 사용합니다.
  • Update, 자원의 (부분)수정은 PATCH 메서드를 사용합니다.
  • Delete, 자원의 삭제는 DELETE 메서드를 사용합니다.

표현

  • 클라이언트가 자원의 상태에 대한 변경을 요청하면 서버는 이에 대한 적절한 응답으로 회신합니다.
  • REST에서 하나의 자원은 JSON, XML, RSS, TEXT 등 여러 형태로 표현하지만 주로 JSON이나 XML을 사용합니다.

REST의 속성

Server - Client

  • 클라이언트는 서버에 자원을 요청하고 서버는 클라이언트의 요청을 처리하고 응답합니다.

Stateless (무상태)

  • HTTP는 무상태이므로 REST 또한 무상태입니다.

Cacheable (캐시 처리 가능)

  • HTTP에서 제공하는 캐시 기능을 그대로 이용하여 캐시 구현을 할 수 있습니다.

Layered System (계층화)

  • 서버는 순수 비즈니스 로직, 보안 장비, 암호화, 사용자 인증, 로드밸런싱 등 구조를 나눠 구축할 수 있다.

Code-On-Demand (실행 코드 제공)

  • 서버로부터 스크립트를 받아서 클라이언트에서 실행합니다.

Uniform Interface (인터페이스 일관성)

  • URI로 지정한 자원에 대한 조작을 통일된 인터페이스로 수행합니다.
  • HTTP를 사용할 수 있는 모든 플랫폼에서 사용할 수 있습니다.

REST API 디자인 가이드

REST는 네트워크 자원을 식별하고 자원에 대한 행위를 정의하지만 표준이 존재하지 않습니다. 그래서 관행적으로 따르는 좋은 REST API 디자인 가이드를 따르면 좋습니다.

자원의 이름은 명사와 소문자를 사용합니다.

GET /insert/1
GET /users/1

URI에 자원의 행위를 명시하지 않고 HTTP 메서드를 사용해서 자원에 대한 행위를 나타냅니다.

GET /user/insert/1
POST /users/1

/ 는 계층 관계를 나타낼 때 사용합니다.

GET /country/address

URI 마지막에 / 를 포함하지 않습니다.

GET /movie/actor/
GET /movie/actor

URI에는 소문자를 사용합니다.

GET /Movie/Actor
GET /movie/actor

_ (underscore) 대신 - (hyphen)을 사용합니다.

GET /host_deny
GET /host-allow

참고 링크


REST란? REST API란? RESTful이란?

당신의 API가 RESTful하지 않은 5가지 증거

카테고리: ,

업데이트:

댓글남기기