스프링부트 - #6 REST
2020. 11. 17. 13:22ㆍ개발&TIL/스프링
REST(Representational State Transfer)는 웹의 장점을 극대화 하는 통신 네트워크 아키텍처이며,
REST의 구현 원칙을 제대로 지키는 시스템을 RESTful이라고 함
HTTP와 URL의 단순하고 간결한 장점을 계승한 네트워크 아키텍처
RESTful 제약조건
- 클라이언트-서버 : 관심사의 명확한 분리
- 무상태성 : 서버에 클라이언트의 상태 정보를 저장하지 않음
- 캐시 가능: 클라이언트이 응답을 캐시
- 계층화 시스템 : 중개 서버나 로드 밸런싱, 공유 캐시 등의 기능을 사용하여 확장성이 있는 시스템 구성 가능
- 코드 온 디멘드 : 클라이언트는 서버에서 자바 애플릿, 자바스크립트 실행 코드를 전송받아 기능을 확장가능, 선택적 제약
- 인터페이스 일관성 - URI로 지정된 리소스에 균일하고 통일된 인터페이스 제공
인터페이스 일관성
- 자원 식별 : 웹 기반의 REST에서 리소스 접근은 주로 URI로 사용 (URI, parameter)
- 메시지를 통한 리소스 조작 : 클라이언트가 메타데이터를 가지고 있으면 자원을 수정, 삭제하는 충분한 정보를 같는것 (content-type)
- 자기 서술적 메시지 : 자신을 어떻게 처리해야 하는지 충분한 정보를 포함 (HTTP Method, Header)
- 애플리케이션 상태에 대한 엔진으로서의 하이퍼미디어(HATEOAS) : 응답할때 결과 데이터만 제공하는것이 아닌 URI를 함께 제공하는 원칙
REST API 설계하기
- 자원(resource) : URI
- 행위(vorb) : HTTP 메서드
- 표현(representations) : 리소스에 대한 표현 (HTTP Message Body)
URI 설계
URI는 URL을 포함하는 계념
URI는 웹에 있는 자원의 이름과 위치를 식별
URI는 명사를 사용해야 하며 동사를 피해야 함
동사의 표현은 HTTP 메서드인 GET, POST, PUT, DELETE 로 사용해야 하나 모든 경우에 완벽 호환 되진 않음
단수형보다는 복수형을 사용
http://localhost:8080/api/books
컬렉션(리스트 등)으로 URI를 사용할 경우 컬렉션을 한번 더 감싼 중첩 형식으로 사용해야 추후 수정, 추가 시에 번거롭지 않음
행위 설계
- books의 동사를 HTTP 메서드로 표현하는것
- HTTP 기본 메서드 표현
Resource | GET(read) | POST(create) | PUT(update) | DELETE(delete) |
---|---|---|---|---|
/books | book 목록보기 | 해당 book 추가 | - | - |
/books/1 | ID가 1인 book 보기 | - | ID가 1인 book 수정 | ID가 1인 book 삭제 |
스프링 부트 데이터 레스트는 리포지토리 하나만 생성, MVC 패턴을 활용한 방식과 달리 컨트롤러와 서비스 단계 X
PageResource 객체
- 이 객체를 생성하면 HATEOAS가 적용되며 페이징값까지 생성된 REST형 데이터를 생성
CORS 허용 및 시큐리티 설정
- Ajax 통신용 코드에 적용되는 HTTP 요청시 동일 출처 정책
- 출처는 자원 + 도메인 + 포트('http://locahost:8080') 로 결합된 문자열로 이 조합이 다르면 다른 출처로 판단
- CORS(cross orgin resource sharing)은 서로 다른 도메인의 접근을 허용하는 권한 부여
- org.springframework.web.cors.CorsConfiguration 객체를 이용하여 CORS 설정 가능
@RepositoryRestController
MVC 패턴에서 VC를 생략하는 도메인 + 리포지토리 REST API 로 생성 가능
detection-strategy 프로퍼티
리포지토리 노출전략을 설정가능한 프로퍼티값 (ALL, DEFAULT, ANNOTATION, VISIBILITY)
@RepositoryRestResource
스프링 부트 데이터 레스트 지원 어노테이션
@RepositoryRestController 주의 사항
- 매핑하는 URL 형식이 스프링 부트 데이터 레스트에서 정의하는 REST API 형식이 맞아야 함
- 기존에 기본으로 제공하는 URL 형식과 같게 제공해야 해당 컨트롤러의 메서드가 기존의 기본 API를 오버라이드
728x90
'개발&TIL > 스프링' 카테고리의 다른 글
스프링부트 - #7 batch (0) | 2020.11.17 |
---|---|
스프링부트 - #5 oAuth2 (0) | 2020.11.17 |
스프링부트 - #4 web (0) | 2020.11.17 |
스프링부트 - #3 테스트 (0) | 2020.11.17 |
스프링부트 - #2 환경설정 (0) | 2020.11.17 |