가수면

HATEOAS 본문

Java

HATEOAS

니비앙 2023. 12. 26. 22:07

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