[Web] Restful API 정리
Spring Boot와 Vue.js를 사용해서 웹 개발을 하다보니 프론트와 서버의 통신에 REST API를 사용하게 되었다.
이전에 Spring MVC를 사용할 때는 써보지 않았던 방식이라 REST API란 어떤 것인지 공부해서 정리해보았다.
정의
REST는 ‘Representational State Transfer’의 약어로 하나의 URI는 하나의 고유한 리소스(Resource)를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정하는 원칙
로이 필딩(Roy Fielding)의 논문에서 최초로 소개되었는데 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표
프로토콜이나 표준이 아니라 아키텍쳐의 원칙이라는 것이 중요하다.
구성
- 자원(Resource) : URI
- 행위(Verb) : HTTP Method
- 표현(Representations) : 자원(Resource)을 JSON, XML 등 여러가지 언어로 표현
특징
- Uniform Interface (유니폼 인터페이스)
- URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
- Stateless (무상태성)
- 작업을 위한 상태정보(세션, 쿠키 등)를 따로 저장하고 관리하지 않음, 그래서 API 서버는 들어오는 요청만 단순히 처리하기만 하면 끝남
- 자유도가 높아지고 구현이 단순해짐
- Cacheable (캐시 가능)
- HTTP라는 웹표준을 그대로 사용하기 때문에 HTTP가 가진 캐싱 기능이 적용 가능
Last-Modified
태그나E-Tag
를 이용하면 캐싱 구현이 가능
- Self-descriptiveness (자체 표현 구조)
- REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있음
- Client-Server
- REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어듬
- Layered System (계층형 구조)
- REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같읕 네트워크 기반의 중간매체를 사용할 수 있게 함
디자인 가이드
- URI에 들어가는 정보의 자원은 명사를 사용
- URI경로 마지막에 슬래시 사용금지
- URI에 행위를 포함하지 않음 (CRUD 함수이름 등)
- 네이밍 규칙은 케밥 케이스를 사용
- 언더바(
_
) 사용금지 - 파일확장자는 URI에 포함하지 않음
저번에 프로젝트를 진행할 때 이 디자인 규칙을 신경쓰지 않고 설계를 했었다. (프로젝트 기간이 촉박했다…)
그래서 프로젝트가 끝난 지금이라도 RESTful 디자인 가이드에 부합한 API를 설계 했는지 코드를 다시보고 REST API에 대해 공부하면서 프로젝트를 회고하는 시간을 가지고 있다.
다음 포스팅부터는 프로젝트를 회고하면서 느낀 점등을 정리해서 올릴 예정이다.
댓글남기기