목차
- REST 란?
- RESTful 제약
- REST API
- @RestController
- REST API 문서화
1. REST
REST(Representational State Transfer)는 World Wide Web과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
REST는 네트워크 아키텍처 원리의 모음이다.
'네트워크 아키텍처'란? 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반을 일컫는다. 웹 상의 자료를 HTTP위에서 SOAP나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다.
REST 아키텍처 형상을 따르면, HTTP나 WWW이 아닌 커다란 소프트웨어 시스템을 설계하는 것도 가능하다.
또한, 리모트 프로시저 콜 대신에 간단한 .XML과 HTTP 인터페이스를 이용해 설계하는 것도 가능하다.
2. RESTful 제약
RESTful 이란?
"REST의 제약 조건들을 제대로 지키면서 REST 아키텍처를 만든 것"이다.
제약
- Client-Server 구조 (Client-Server Model)
일관적인 인터페이스로 분리되어야 한다. - 무상태성 (States)
서버에 클라이언트의 상태 정보를 저장하지 않는다. - 캐시 기능 (cacheable)
클라이언트의 응답을 캐시할 수 있어야 하며 캐싱은 Client-Server 간 상호작용을 부분적으로 or 완전하게 제거하여 scalability와 성능을 향상시킨다. - 계층화 시스템 (Layered System)
중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 확장성 있는 시스템을 구성하는 데 유용하다. - 코드 온 디멘드 (Code on Demand)
서버가 자바 애플릿이나 JavaScript 실행코드의 제공을 통해 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능 확장시킬 수 있다. - 인터페이스 일관성 (Uniform Interface)
아키텍처를 단순화시키고 작은 단위로 분리함으로써 Client-Server의 각 파트가 독립적으로 개선될 수 있도록 해준다.
REST 인터페이스의 원칙에 대한 가이드
1. 자원 식별
2. 메시지를 통한 리소스 조작
3. 자기 서술적 메시지
4. APP 상태에 대한 엔진으로서의 하이퍼미디어 (HATEOAS)
REST API 설계
구성
- 자원 (Resource) : URI
- 행위 (Verb) : HTTP 메서드
- 표현 (Representations) : 리소스에 대한 표현 (HTTP Message Body)
URI 설계
리소스는 서비스를 제공하는 시스템의 자원을 의미하여 URI로 정의된다.
URI는 웹에 있는 자원의 이름과 위치를 식별한다.
명사를 사용
URI는 명사를 사용, 동사는 피하자.
명사만으로는 세부적인 동작을 표현하는 데 한계가 있을 때, 동사를 URI에 포함할 수 있다.
동사는 HTTP 메서드로 표현
동사를 표현할 때는 HTTP 메서드인 GET, POST, PUT, DELETE 등으로 대체해야 한다.
복수형을 사용
URI에서는 명사에 단수형보다 복수형을 사용해야 한다.
슬래시(/)로 계층관계를 표현
URI의 마지막에 슬래시를 넣지 X
슬래시를 넣더라도 실행하는 데 문제는 없지만 다음 계층이 있다는 오해 생길 수 있다.
URI는 소문자로 작성
가독성을 높이려면 하이픈(-)을 사용할 수 있지만 언더바( _ )는 사용하지 않는다.
행위 설계
기능 | Resource | HTTP Method |
목록 조회 | /product | GET |
상세 조회 | /prodcut/{productIdx} | GET |
등록 | /product/{productIdx} | POST |
수정 | /product/{productIdx} | PUT |
삭제 | /product/{productIdx} | DELETE |
4. @RestController
@RestController = @Controller + @ResponseBody
이렇게 생각하면 편하다.
클래스 상단에 @RestController를 선언하면 @ResponseBody를 붙여 주지 않아도 된다.
@RestContoller
@RequestMapping("/product")
public class productController {
// ....
}
5. REST API 문서화
프로젝트를 진행하면서 REST API에 대한 문서를 작업해야되는 경우가 있다.
수주를 넣는 고객사마다 다소 차이는 있지만, 문서화를 시켜둬야하는 건 어딜가나 똑같을 것이다.
이번 프로젝트를 하면서 Swagger를 사용하였다. 정말 편하고 효율성이 높은 프레임워크였다.
Swagger는 REST API 문서를 만들어주는 프레임워크다. 나중에 한번 사용해보면 정말 좋다는 느낌을 받을 것이다.
'WEB ( Back, Front) > Spring' 카테고리의 다른 글
[CI/CD] 환경 구축 및 Spring boot Gradle Build 설정(Windows 환경)(2) (0) | 2022.10.20 |
---|---|
[CI/CD] 환경 구축 및 Spring boot Gradle Build 설정(Windows 환경)(1) (0) | 2022.08.25 |
Spring boot - spring을 영리하게 쓰는 tool (0) | 2022.02.04 |
@RequestParam 값이 Null 일 때, 예외 처리하는 방법 (0) | 2021.06.16 |
[주석] 코드 문서화를 위한 주석 규칙 (@param, @return 활용기) (0) | 2019.08.29 |
댓글