REST API 관련 학습!
Representational State Transfer의 약자로 자원을 이름으로 구분해 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
- 이름 : 자원의 표현 즉, DB 학생 정보가 자원이면, student를 자원의 표현으로 정한다.
- 상태(정보) 전달은 주로 JSON, XML을 통해 데이터를 주고 받는 것이 일반적이다.
- WWW 와 같은 분산 하이퍼미디어 시스템을 위한 SW 개발 아키텍처 형식
- 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하므로 웹의 장점을 최대한 활용가능한 아키텍처 스타일
- 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나.
- REST의 구체적인 개념을 살펴보면 다음과 같다.
HTTP URI를 통해 자원을 명시하고 HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미🎈 CRUD Operation?
- CREATE : 생성(POST), Read : 조회(GET), Update : 수정(PUT), Delete : 삭제(DELETE), HEAD header 정보 조회(HEAD)
🎈 REST 장단점
- HTTP 프로토콜의 인프라를 그대로 사용하기에 REST API 사용을 위한 별도의 인프라 구축할 필요 X
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하며 범용성을 보장한다.
- 서버, 클라이언트 역할 명확하게 분리
- 표준이 존재하지 않고 HTTP Method가 4개 밖에 없어 제한적이다.
- 브라우저를 통해 테스트할 일이 많은 서비스라면 url보다 header값이 더 어렵게 느껴지고 구형 브라우저가 아직 RESTAPI를 제대로 지원하지 못하는 부분이 존재함
❗ REST가 필요한 이유
- 애플리케이션 분리 및 통합이 가능하고 다양한 클라이언트가 등장하며 필요성이 대두되고 있다.
- 최근 서버프로그램은 IOS, Android와 같은 모바일 디바이스에서도 통신이 가능해지고 있다.
- 멀티 플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하기에 이점이 존재.
- REST 기반으로 서비스 API를 구현한 것
- HTTP 표준을 기반으로 HTTP를 지원하는 프로그램 언어로 클라이언트, 서버 구현 가능
- REST 기반으로 시스템을 분산해 확장성, 재사용성을 높여 유지보수, 운용 편리
❗ 설계 시 기본 규칙
- URI는 정보의 자원을 표현해야 한다. (resource의 도큐먼트 이름만 단수, 소문자 사용)
- 자원에 대한 행위는 HTTP Method로 표현. (URI에 포함되면 안됌)
- 슬래시 구분자(/)로 계층 관계 표현
- 생성, resource 목록 표시의 경우에만 /resource로 Route지정
- resource 하나의 내용, 수정, 삭제 시 /resource/:id로 Route 지정
✨ 참고 사항
참고 응답상태코드
1xx : 전송 프로토콜 수준의 정보 교환
2xx : 클라어인트 요청이 성공적으로 수행됨
3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
4xx : 클라이언트의 잘못된 요청
5xx : 서버쪽 오류로 인한 상태코드
참고 사항