2.Spring HATEOAS
Spring HATEOAS 는 Spring으로 개발할 때 HATEOAS 원칙을 따르는 REST 제약조건을 쉽게 적용할 수 있도록 API를 제공하는 스프링의 하위 프로젝트
1. 특징
1-1. 링크와 리소스 표현 모델을 위한 모델 클래스 제공
Spring HATEOAS는 내부적으로 Link, RepresentationModel, EntityModel, CollectionModel 등의 클래스를 제공하여, 각 리소스에 링크를 포함할 수 있도록 도와줌
Sample.java
Order order = new Order(1L, "CREATED");
EntityModel<Order> model = EntityModel.of(order,
new Link("/orders/1").withSelfRel()
);JSON 응답 값
{
"orderId": 1,
"status": "CREATED",
"_links": {
"self": {
"href": "/orders/1"
}
}
}1-2. Spring MVC의 컨트롤러 메서드를 가리키는 링크를 생성할 수 있는 링크 빌더 API(linkTo) 제공
URI를 직접 문자열로 하드코딩하여 작성하지 않고, 컨트롤러 메서드에 대한 타입 안전한 참조를 통해 링크를 생성할 수 있음
→ URI가 바뀌어도 컴파일 타임에 오류를 잡을 수 있어 유지보수에 유리함
// OrderController에 작성되어 있는 getOrder(Long id)가 작성되어 있다고 가정
Link selfLink = linkTo(methodOn(OrderController.class).getOrder(1L)).withSelfRel();
EntityModel<Order> model = EntityModel.of(order, selfLink);1-3. HAL(Hypertext Application Language)과 같은 하이퍼미디어 포맷 지원
Spring HATEOAS는 기본적으로 HAL 포맷을 지원함
HAL(Hypertext Application Language)
링크 정보를 _links, 관련 리소스를 _embedded로 명시하는 JSON 기반 하이퍼미디어 형식의 타입
@GetMapping(value = "/orders/{id}", produces = MediaTypes.HAL_JSON_VALUE)
public EntityModel<Order> getOrder(@PathVariable Long id) {
Order order = orderService.findById(id);
return EntityModel.of(order,
linkTo(methodOn(OrderController.class).getOrder(id)).withSelfRel(),
linkTo(methodOn(OrderController.class).cancelOrder(id)).withRel("cancel")
);
}Last updated on