ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HATEOAS
    BackEnd/Spring Boot 2022. 5. 20. 09:10
    반응형

    Overview

      해당 글에서는 Level 3 REST API 구현을 위한 HATEOAS(Hypermedia As the Engine Of Application State) 기능에 대해 살펴보겠습니다. HATEOAS란 REST API를 사용하는 클라이언트가 서버와 동적인 상호작용이 가능하도록 하는 것을 의미합니다. 즉, 현재 리소스와 연관된 자원 상태 정보를 제공하는 것을 의미합니다.

     

      예를 들어, 계좌 조회 시 아래와 같이 예치금, 출금, 이체 또는 요청 닫기 등의 후속 링크를 포함하여 응답합니다.

    HTTP/1.1 200 OK
    
    {
        "account": {
            "account_number": 12345,
            "balance": {
                "currency": "usd",
                "value": 100.00
            },
            "links": {
                "deposits": "/accounts/12345/deposits",
                "withdrawals": "/accounts/12345/withdrawals",
                "transfers": "/accounts/12345/transfers",
                "close-requests": "/accounts/12345/close-requests"
            }
        }
    }

     

    Dependency

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>

     

      구현 결과는 아래와 같습니다. v1 호출 시 추가적인 정보인 v2를 링크에 포함하여 제공합니다.

     

    GoodsController

    import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
    import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
    
    ... 생략 ...
    
      @GetMapping(path = "/v1/{goodsCode}") // endpoint
      public EntityModel<Goods> findGoodsV1(@PathVariable int goodsCode) throws Exception {
    
        if (goodsCode == 1) {
          Goods goods = new Goods(goodsCode, "1번 상품입니다.");
    
          // HATEOAS
          EntityModel<Goods> entityModel = EntityModel.of(goods);
          entityModel.add(linkTo(methodOn(this.getClass()).findGoodsV2(goodsCode)).withSelfRel());
    
          return entityModel;
        } else if (goodsCode == 10000) {
          throw new GoodsNotFoundException("GoodsNotFoundException");
        } else {
          throw new Exception("Exception");
        }
      }
    반응형

    'BackEnd > Spring Boot' 카테고리의 다른 글

    HAL Browser  (0) 2022.05.25
    Actuator  (0) 2022.05.20
    버전 관리(Versioning)  (0) 2022.04.26
    @JsonIgnore  (0) 2022.04.25
    XML format  (0) 2022.04.25

    댓글

Designed by Tistory.