HATEOAS

홍성일·2023년 2월 23일
0

RESTful API

목록 보기
1/3


HATEOAS : Hypermedia As The Engine Of Applicaion State
현재 리소스와 연관된 (호출 가능한) 자원 상태 정보를 제공

-pom.xml에 dependency 추가

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0

Spring 버전에 따라서 구현 방식이 다른데

  • 2.1.8 버전
    Resource
    ControllerLinkBuilder

  • 2.2 버전 이상
    Resource -> EntityModel
    ControllerLinkBuilder -> WebMvcLinkBuilder

구현 코드는 다음과 같다.
Filtering을 적용시켜주기 위해서 MappingJacksonValue로 반환

    public MappingJacksonValue retrieveUser(@PathVariable int id){
        User user = service.findOne(id);
        if(user==null){// 존재하지 않을경우 Exception 발생
            throw new UserNotFoundException
            (String.format("ID: [%s] NOT FOUND!",id));
        }
        // retrieveAllUsers 메소드와 연결("all-users")
        EntityModel<User> model = EntityModel.of(user);
        WebMvcLinkBuilder linkTo = WebMvcLinkBuilder
                .linkTo(WebMvcLinkBuilder.methodOn(this.getClass())
                .retrieveAllUsers());
                
        model.add(linkTo.withRel("all-users"));

        // filter 적용
        SimpleBeanPropertyFilter filter=SimpleBeanPropertyFilter
                .filterOutAllExcept("id","name","joinDate");//필터
        FilterProvider filterProvider = new SimpleFilterProvider()
        .addFilter("UserInfo",filter);
        
        MappingJacksonValue mapping = new MappingJacksonValue(model);
        mapping.setFilters(filterProvider);
        
        return mapping;
    }

결과 화면

필터링, linkTo가 적용된 것을 볼 수 있다.

Swagger 클래스
3.x.x 버전은 이렇게 접근
http://localhost:8088/swagger-ui/index.html
http://localhost:8088/v2/api-docs
이전 버전
http://localhost:8088/swagger-ui.html

@Configuration
@EnableSwagger2
public class SwaggerConfig{
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2);
    }
}

http://localhost:8088/v2/api-docs 화면

http://localhost:8088/swagger-ui/index.html 화면

profile
홍성일

0개의 댓글