-
HATEOAS(Hypermedia As The Engine Of Application State)백기선(인프런 강의)/스프링 부트 개념과 활용 2020. 6. 22. 12:11반응형
Hypermedia As The Engine Of Application State
Rest API를 만들 때,
서버
현재 리소스와 연관된 링크 정보를 클라이언트에게 제공
클라이언트
연관된 링크 정보를 바탕으로 리소스에 접근한다.
EntityModel에 추가해서 리턴하는 식으로 구현하고, 클라이언트도 그걸 사용하는 방식이 Hateoas이다.
ObjectMapper
제공하는 리소스를 Json으로 변환할 때 사용하는 인터페이스
객체를 Json으로 변환하거나 Json을 객체로 변환할 때 사용
LinkDiscovers
XPath를 확장해서 만든 HATEOAS용 클라이언트 API
rest api로 다른쪽 서버 api를 요청해서 받을 때, hateoas를 지원한다면 메소드를 이용해서 self에 해당하는 링크 정보를 가져 올 수 있다.
예제
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-hateoas</artifactId> </dependency>
public class Hello { private String prefix; private String name; public String getPrefix() { return prefix; } public void setPrefix(String prefix) { this.prefix = prefix; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Hello [prefix=" + prefix + ", name=" + name + "]"; } }
Hateoas에 있는 EntityModel을 선언한다.(우리가 제공할 리소스의 링크정보)
그 후, SampleController 클래스에서 제공하는 hello라는 메서드에 대한 링크를 참조이 링크를 Self라는 릴레이션으로 만들어서 추가
@RestController public class SampleController { @GetMapping("/hello") public Hello hello() { Hello hello = new Hello(); hello.setPrefix("hey, "); hello.setName("JinSeok"); EntityModel<Hello> helloEntiryModel = new EntityModel<>(hello); // SampleController 클래스에서 제공하는 hello라는 메소드 링크를 따서 Self라는 릴레이션으로 추가 helloEntiryModel.add(linkTo(methodOn(Samplecontroller.class).hello())).withSelfRel()); return helloEntiryModel; } }
@RunWith(SpringRunner.class) @WebMvcTest(SampleController.class) public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void hello() throws Exception { mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(jsonPath("$._links.self") .exists()); } }
반응형'백기선(인프런 강의) > 스프링 부트 개념과 활용' 카테고리의 다른 글
스프링 데이터 1부 : 소개 (0) 2020.07.03 CORS(Cross-Origin Resource Sharing) (0) 2020.06.24 HtmlUnit (0) 2020.05.10 Thymeleaf (0) 2020.05.08 index 페이지와 파비콘 (0) 2020.05.07