RESTful WebService (4) - SpringBoot API 사용

박정민·2021년 3월 16일
0

RESTful

목록 보기
4/4

1. HATEOAS 적용

HATEOAS란?

  • 현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공

HATEOAS 적용

<UserController class> 추가

@GetMapping("/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable int id) { 
    User user = service.findOne(id);

    if(user == null) {
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }

    // HATEOAS
    EntityModel<User> model = new EntityModel<>(user);
    WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    model.add(linkTo.withRel("all-users"));

    return model;
}
  • WebMvcLinkBuilder 클래스의 methodOn함수와 linkTo함수를 통해 현재 리소스(User)와
    연관된 자원 상태 정보를 지정하여 링크로써 반환해준다.

  • 클라이언트가 Get /users/1이라는 요청을 보내면 응답으로 해당 id의 user정보와 사용자 전체 조회를
    할 수 있는 URI(Get /users)를 같이 제공해준다.

2. Swagger 적용

Swagger란?

  • 개발자, 사용자를 위한 Documentation 생성 기능 제공

Swagger 적용

<SwaggerConfiguration class> 추가

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2);
    }
}
  • Get /v2/api-docs or Get /swagger-ui.html을 통해 현재 프로젝트의 info, host, basePath, tags, paths, definitions등 API Documentation을 화면에 보여준다.

Documentation Customize하는 방법

<SwaggerConfiguration class> 수정

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

    private static final Contact DEFAULT_CONTACT = new Contact("jungmi",
            "http://www.naver.com", "pjm4142@ber.com");

    private static final ApiInfo DEFAULT_API_INFO = new ApiInfo("Awesome API title",
            "My user management REST API service", "1.0", "urn:tos",
            DEFAULT_CONTACT, "Apache 2.0",
            "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList<>());

    private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = new HashSet<>(
            Arrays.asList("application/json", "application/xml")
    );

    @Bean
    public Docket api(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(DEFAULT_API_INFO)
                .produces(DEFAULT_PRODUCES_AND_CONSUMES)
                .consumes(DEFAULT_PRODUCES_AND_CONSUMES);
    }
}
  • Swagger에서 제공해주는 함수들을 이용하여 contact정보, ApiInfo, produce, consume 정보를
    수정, 추가할 수 있다.

  • Documentation에 클래스 description을 추가 하는 방법
    • @ApiModel(description = "~~~") 클래스 블록위에 추가

  • Documentation에 필드 description을 추가 하는 방법
    • @ApiModelProperty(notes = "~~~") 필드 위에 추가

3. Actuator 설정

Actuator란?

  • 기동하고 있는 애플리케이션의 상태를 확인할 수 있는 모니터링 기능 제공

  • pom.xml에 actuator 라이브러리 종속성 추가
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  • 더 많은 상태 정보를 확인하기 위해 application.yml에 다음 추가
management:
  endpoints:
    web:
      exposure:
        include: "*"
profile
화이팅!

0개의 댓글