개발강의정리/Spring

[스프링 기반 REST API 개발] 3-4. 스프링 REST Docs 적용

nineDeveloper 2020. 3. 23.
728x90

스프링 기반 REST API 개발

3. HATEOAS와 Self-Decribtive Message 적용

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-rest-api-study/tree/chap03-04_rest_docs_apply

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/spring_rest-api/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

4. 스프링 REST Docs 적용

REST Docs 자동 설정

테스트에 설정하면 target/generated-snippets 디렉토리를 생성하고 snippets 정보를 추가해줌

매번 테스트를 실행할때마다 snippets 들은 오버라이딩 되서 덮어씌워짐

@AutoConfigureRestDocs

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureRestDocs
@Import(RestDocsConfiguration.class)
public class EventControllerTests {

RestDocMockMvc 커스터마이징

RestDocs 요청 응답 포멧팅 하기위해 커스터마이징이 필요

RestDocsMockMvcConfigurationCustomizer 구현한 빈 등록

@TestConfiguration

test 패키지 영역에 RestDocsConfiguration 클래스를 구현한다

@TestConfiguration
public class RestDocsConfiguration {

    @Bean
    public RestDocsMockMvcConfigurationCustomizer restDocsMockMvcConfigurationCustomizer() {
        return new RestDocsMockMvcConfigurationCustomizer() {
            @Override
            public void customize(MockMvcRestDocumentationConfigurer configurer) {
                configurer.operationPreprocessors()
                        .withRequestDefaults(prettyPrint()) //요청 본문 문서화
                        .withResponseDefaults(prettyPrint()); //응답 본문 문서화
            }
        };
    }

}

테스트 코드에 @TestConfiguration 적용

@AutoConfigureRestCods, @Import(RestDocsConfiguration.class) 어노테이션을 추가하고
EventControllerTests.createEvent() 테스트 코드에 .andDo(document("create-event)) 코드를 추가한다


...

import me.freelife.rest.common.RestDocsConfiguration;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.context.annotation.Import;

...

@AutoConfigureRestDocs
@Import(RestDocsConfiguration.class)
public class EventControllerTests {

    ...

    @Test
        @TestDescription("정상적으로 이벤트를 생성하는 테스트")
        public void createEvent() throws Exception {
            mockMvc.perform(post("/api/events/")
                    .contentType(MediaType.APPLICATION_JSON_UTF8) //요청타입
                    .accept(MediaTypes.HAL_JSON) //받고싶은 타입
                    .content(objectMapper.writeValueAsString(event))) //event를 json을 String으로 맵핑

                    ...

                .andDo(document("create-event")) //문서 이름

테스트 할 것

API 문서 만들기

  • 요청 본문 문서화
  • 응답 본문 문서화
  • 링크문서화
    • profile 링크 추가
  • 응답 헤더 문서화
728x90

댓글

💲 추천 글