ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.