Skip to Content
Suffering builds character

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