정의
- REST(REpresentational State Transfer)
- 기계와 기계가 규격화된 방식으로 인터넷과 웹을 통해 통신할 수 있는 규칙
- server와 client가 통신하기 위한 규약 중 하나
- 분산 시스템 설계를 위한 아키텍쳐(구성) 스타일
- 네트워크 아키텍쳐 원리 모음
- 제약 조건의 집합
- 사이트 구성 원리
- 표현(REpresentational) / 상태(State) / 전송(Transfer)
- 자원의 표현을 가지고 상태를 전달한다
- Restful API
- REST스러운 API
- 사이트 구성 원리를 따르는 API
- 왜 필요한가?
- REST API 메시지를 읽는 것만으로도 메시지가 의도하는 바를 명확하게 파악 가능
- 기본적으로 HTTP를 사용하여 client와 server 통신(요청 및 응답 처리)
- HTTP 인프라를 그대로 사용하기 때문에, REST API 사용을 위한 별도의 인프라 구축 필요 없음
- client와 server가 독립적으로 운영 가능
- client가 리소스를 요청하면 server는 해당 리소스를 응답해주기만 하면 된다
GET /
GET /sports/soccer
// soccer를 하는 player들 중 11번 선수를 지워라
DELETE /sports/soccer/players/11
DELETE /sports/baseball/pleayers/20
- 실제 사례
- url만 보더라도 어떤 위치에서 작업을 하는지 알 수 있음
// youtube
youtube.com/feed/trending [인기]
youtube.com/feed/subscriptions [구독]
youtube.com/channel/takityaki
youtube.com/channel/takityaki/playlists
역사
- Restful API의 탄생
- 로이 필딩
- 웹 구조를 서술한 비공식 문서 존재했으나 실제 웹 구현이 너무 빨라 시대에 뒤떨어진 경우가 많았음
- 이미 캐시와 프록시 등이 웹에는 존재했지만 이에 대해 인식하는 표준은 없다시피 함
- Rest 개발 이유
- HTTP 1.0, 1.1의 개념을 소통하기 위해서
구현 방법
- 자원(Resource)
- URI에 명시
/feed/subscriptions
- 동사가 아닌 명사를 사용
GET /sports/soccer/show
[X]
- 표현(Representational)
- Header로 전달
- client가 전달 받고자 하는 자원에 대한 data
text/html
, image/gif
, text/*(모든 타입)
- 상태(State)
- 모든 동작은 Method로 표현
- GET(조회), POST(생성), PUT(수정), DELETE(삭제)
- url가 아닌 method를 통해 상태 표현
- 수정한 data는 body로 전달
- GET
- URI 형식으로 웹 서버측 리소스(데이터)를 요청
- 이때, 요청 받은 URI의 정보를 검색하여 응답
- HEAD
- 메시지 헤더(내부 문서 정보) 취득
- GET 방식과 유사
- 응답에 BODY가 없고 응답 코드와 HEAD만 응답
- 웹 서버 정보 확인, 버전 확인, 최종 수정일 등 조회 시 사용
- POST
- 내용 전송(파일 전송 가능)
- 요청된 자원 생성(create)
- PUT
- 내용 갱신 위주(파일 전송 가능)
- 요청된 자원 수정(update)
- 모든 데이터를 수정할 때 사용
- ex:)
/waters/:삼다수
=> 삼다수가 가지고 있는 모든 데이터
- PATCH
- PUT과 유사
- 자원의 일부를 교체하기 위해 사용
- ex:)
/waters/:삼다수
=> 삼다수가 가지고 있는 일부 데이터(리터, 날짜)
- CONNECT
- 요청된 자원에 대해 양방향 연결을 시작한다는 의미
- 주로 웹 서버에 프록시 기능을 요청할 때 사용
- OPTION
- 목표 리소스와의 통신 옵션을 설명하기 위해 사용
- 시스템에서 지원되는 메소드 종류 확인 가능
- TRACE
- client로부터 request packet이 변조 발생
- server에 도달한 최종 packet의 request packet 볼 수 있음
- 요청을 보낸 곳에 어떤 요청이 가공되어 있는지 등을 조사 가능
- 표현
- 리소스의 응답 타입은 Header로 나타낸다
- 브라우저가 자동으로 설정하는 Accept 사용
- ex:) "JPG 확장자의 프로필 사진만 응답해주세요"
Content-Type: text/html; charset=utf-8
- client가 전달(요청)하는 data type
- 응답 data type:
Accept: text/html, image/jpg
- Restful API 설계 원칙
- Uniform Interface(일관된 인터페이스)
- StateLess(무상태성)
- Cacheable(캐시 가능)
- Code on demand
- Layered System(계층형 시스템)
- Client / Server
- 인터넷 상에 이미 해당 원칙이 적용되어 있으므로 인터페이스만 REST하게 설계해주면 된다
참고: 우리밋_woorimIT youtube channel - [Restful API] 자원의 표현을 가지고 상태를 전달한다.