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));
}
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: "*"