REST
REST 등장배경
- 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었다
- 로이 필딩은 HTTP의 주요 저자 중 한 사람으로, 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다
REST 정의
- Representational State Transfer라는 용어의 약자
- 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나
- 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미
- 자원(resource)의 표현(representation)에 의한 상태 전달
- 자원: 해당 소프트웨어가 관리하는 모든 것 ( 문서, 그림, 데이터, 해당 소프트웨어 자체 등 )
- 표현 : 그 자원을 표현하기 위한 이름 ( DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함 )
- 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다. ( JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 )
REST 개념
- 어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로 GET, POST 등의 방식(Method)을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation of Resource)로 표현된다
💡 URI 와 URL의 차이점
- URL(Uniform Resource Locator): 인터넷 상 자원의 위치
- URI(Uniform Resource Identifier): 인터넷 상의 자원을 식별하기 위한 문자열의 구성
- URI는 URL을 포함하게 된다
REST가 필요한 이유
- 애플리케이션 분리 및 통합
- 다양한 클라이언트의 등장
- 다양한 브라우저와 모바일 디바이스(안드로이드, 아이폰)에서 통신이 필요해짐
- 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색한 결과, REST에 관심을 가지게 됨
REST 구성 요소
1. 자원(Resource) - URI
- 모든 자원에는 고유한 ID가 존재하고, 이 자원은 Server에 존재한다
- 자원을 구별하는 ID는 HTTP URI다. ex)
/exgroups/:exgroup_id
- Client는 URI를 이용해 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다
2. 행위(Verb) - Method
- HTTP 프로토콜의 Method를 사용한다
- HTTP 프로토콜은 GET, POST, PUT, PATCH, DELETE의 Method를 제공한다. ( CRUD )
- GET : 정보 요청, URI가 가진 정보를 검색하기 위해 서버에 요청
- POST : 정보 입력, 클라이언트에서 서버로 전달하려는 정보를 보낸다
- PUT : 정보 업데이트, 주로 내용을 갱신하기 위해 사용 (데이터 전체 변경)
- PATCH : 정보 업데이트, 주로 내용을 갱신하기 위해 사용 (데이터 일부 변경)
- DELETE : 정보 삭제 (안전성 문제로 대부분 서버에서 비활성화함)
3. 표현 ( Representation of Resource )
- Client와 Server가 데이터를 주고받는 형태로 JSON, XML, TEXT, RSS 등이 있음
- 일반적으로 JSON, XML을 통해 데이터를 주고 받는다
REST 특징
Server-Client (서버-클라이언트 구조)
- Servers는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다
- Client는 사용자 인증이나 context( 세션, 로그인 정보 ) 등을 직접 관리하고 책임진다
- 역할을 확실히 구분시킴으로써 서로 간의 의존성을 줄인다
Stateless (무상태)
- 작업을 위한 상태정보(세션 정보,쿠키정보)를 따로 저장하고 관리하지 않는다
- Server는 Client의 요청만을 단순 처리하기 때문에 구현이 단순해진다
Cacheable (캐시 처리 기능)
HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다
- HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있다
Layered System (계층 구조)
- Client는 REST API Server만 호출한다
- REST Server는 다중 계층으로 구성될 수 있다
- 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있다
- PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게한다
- URI로 지정한 Resource에 대한 요청을 통일되고, 한정적으로 수행하는 아키텍처 스타일
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능하다
- Loosely Coupling(느슨한 결함) 형태를 갖는다
Self-Descriptiveness (자체 표현)
- 요청 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조로 되어있다
💡 HTTP(HyperText Transfer Protocol)
- 웹(Web)상에서 정보를주고 받을 수 있는 프로토콜
- 초기에는 HTML과 같은 하이퍼미디어 문서를 주로 전송했음
- 최근에는 Plain text, JSON, XML 등 다양한 형태의 정보도 전송함
- 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때까지 대기하는 전통적인 클라이언트-서버 모델을 따른다
💡 로드밸런싱(Load Balancing)
- 둘 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업(Work), 즉, 부하(Load)를 나누는 것
REST API
REST API 정의
- REST의 특징을 기반으로 서비스 API를 구현한 것
- 최근 OpenAPI를 제공하는 업체 대부분은 REST API를 제공한다
💡 API(Application Programming Interface)란?
- 어떠한 응용프로그램에서 데이터를 주고 받기 위한 방법을 의미
- 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공 받을 수 있을지에 대한 규격들
- OpenAPI: 누구나 사용할 수 있도록 공개된 API (구글 맵, 공공 데이터 등)
REST API 디자인 가이드
- URI는 정보의 자원을 표현해야 한다
- 자원에 대한 행위는 HTTP Method(
GET, POST, PUT, PATCH, DELETE)로 표현한다
REST API 중심 규칙
- URI는 정보의 자원을 표현해야 한다
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현
GET : 해당 리소스를 조회
POST : 해당 리소스 생성
PUT : 해당 리소스를 수정
DELETE : 해당 리소스를 삭제
ex) 회원정보를 가져오는 URI
GET /members/show/1 (x)
GET /members/1 (o)
ex) 회원을 추가할 때
GET /members/show/1 (x)
GET /members/1 (o)
ex) 회원을 삭제할 때
GET /members/delete/1 (x)
DELETE /members/1 (o)
URI 설계 시 주의점
- 슬래시( / )로 계층 관계를 표현한다
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
- URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다
http://restapi.example.com/houses/apartments/ (X)
http://restapi.example.com/houses/apartments (0)
- 밑줄( _ )을 사용하지 않고, 하이픈( - )을 사용한다
- 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다
- 글꼴에 따라 다르긴 하지만 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 밑줄 사용은 지양한다
- URI는 소문자로만 구성한다
- RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문에 대소문자에 따라 다른 리소스로 인식하게 된다
- HTTP 응답 상태 코드 사용한다
- 클라이언트는 해당 요청에 대한 실패, 처리완료 또는 잘못된 요청 등에 대한 피드백을 받아야 한다
- 파일 확장자는 URI에 포함시키지 않는다
- REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다
- Accept header를 사용한다
- MIME 타입으로 표현되는, 클라이언트가 이해 가능한 컨텐츠 타입이
무엇인지를 알려주는 HTTP 헤더
http://restapi.example.com/members/soccer/345/photo.jpg (X)
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
REST API와 RESTful API의 차이는? 🙄
- REST의 설계 규칙을 잘 지켜서 설계된 API를 RESTful한 API라고 한다
- REST의 원리를 잘 따르는 시스템을 RESTful이란 용어로 지칭한다
출처
REST API 제대로 알고 사용하기
REST란? REST API 와 RESTful API의 차이점
[간단정리] REST, REST API, RESTful 특징
[Network] HTTP란 무엇인가?
HTTP는 무엇인가??
[네트워크] 로드밸런싱의 개념 및 기법 설명
[IT용어] API란 무엇인가?