가수면
HATEOAS 본문
HATEOAS
HATEOAS (Hypermedia as the Engine of Application State)
RESTful 웹 서비스 디자인의 핵심 원칙 중 하나
클라이언트가 서버와 상호 작용할 때 필요한 모든 정보를 응답에 포함시켜야 한다는 것을 의미
사용자가 다음에 무엇을 할 수 있는지 알 수 있도록 응답 내에 관련 링크와 옵션을 제공한다.
예)
사용자 프로필을 반환할 때, 응답에 사용자 프로필을 수정하거나 삭제할 수 있는 링크도 포함
1. 의존성 설치
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
2. api에 다른 링크 포함 시키기
예시 응답 모양)
응답과 같은 모양을 HAL이라고 함
{
"name": "Adam",
"birthDate": "1992-08-19",
"_links": {
"all-users": {
"href": "http://localhost:8080/users"
}
}
}
만약 기존의 코드가 아래와 같다고 했을 때, HATEOAS를 적용하기 위해 2가지 과정이 필요하다.
@GetMapping("/users/{id}")
public User retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if(user==null)
throw new UserNotFoundException("id:"+id);
return user;
}
1. EntityModel 클래스 인스턴스 생성 및 설정
2. EntityModel에 WebMvcLinkBuilder(스프링 MVC 컨트롤러를 가리키는 링크 인스턴스 구축을 용이하게 해주는 빌더)를 이용해 링크 추가
@GetMapping("/users/{id}")
// EntityModel 설정
public EntityModel<User> retrieveUser(@PathVariable int id) {
User user = service.findOne(id);
if(user==null)
throw new UserNotFoundException("id:"+id);
// EntityModel 클래스 인스턴스 생성
EntityModel<User> entityModel = EntityModel.of(user);
// WebMvcLinkBuilder - 스프링 MVC 컨트롤러를 가리키는 링크 인스턴스 구축을 용이하게 해주는 빌더
// EntityModel에 WebMvcLinkBuilder를 이용해 retrieveAllUsers 링크 추가
WebMvcLinkBuilder link = linkTo(methodOn(this.getClass()).retrieveAllUsers());
// 링크 이름 지정
entityModel.add(link.withRel("all-users"));
return entityModel;
}
HAL Explorer
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-rest-hal-explorer</artifactId>
</dependency>
위 의존성을 설치하면 http://localhost:8080등으로 접속할 때 HAL을 JSON형식이 아닌 ui로 확인할 수 있음
'Java' 카테고리의 다른 글
Spring Security와 JWT (0) | 2024.01.09 |
---|---|
[Spring Boot] 심화 (0) | 2023.12.28 |
Swagger (0) | 2023.12.26 |
Spring Boot로 REST API 만들기 정리 (0) | 2023.12.19 |
[Java] 심화 (0) | 2023.12.12 |
Comments