API 사용을 위한 어떤 정보가 담겨있는 문서를 API 문서 또는 API 스펙(Specification)이라고 함
기능/특징 | Swagger | Spring Rest Docs |
---|---|---|
API 디자인 | 제공 | 미제공 |
API 모델링 | 제공 | 미제공 |
요청 및 응답 형식 정의 | 제공 | 미제공 |
문서화 | 제공 | 제공 |
문서화 방식 | OpenAPI 사양 기반 | 실제 코드 기반 |
사용 방법 | API 디자인, 빌드, 문서화, 테스트를 위한 도구 모음 | Spring 프레임워크와 함께 사용하여 API 문서화 |
장점 | 모든 API 개발 단계를 제공 | 정확성과 일관성을 유지하는 API 문서화 |
단점 | Spring 프레임워크와 통합이 제한적 | API 디자인에 대한 제한적인 기능 |
Spring Rest Docs : REST Api 문서를 자동으로 생성해주는 Spring 하위 프로젝트
- Controller의 슬라이스 테스트를 통해 테스트가 통과되어야지만 API 문서가 정상적으로 작성됨
- 테스트를 중요하게 생각하는 개발자들에게 각광받는 기술 중 하나
import com.codestates.member.controller.MemberController;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
@WebMvcTest(MemberController.class) // (1)
@MockBean(JpaMetamodelMappingContext.class) // (2)
@AutoConfigureRestDocs // (3)
public class MemberControllerRestDocsTest {
@Autowired
private MockMvc mockMvc; // (4)
@MockBean
// (5) 테스트 대상 Controller 클래스가 의존하는 객체를 Mock Bean 객체로 주입 받기
@Test
public void postMemberTest() throws Exception {
// given
// (6) 테스트 데이터
// (7) Mock 객체를 이용한 Stubbing
// when
ResultActions actions =
mockMvc.perform(
// (8) request 전송
);
// then
actions
.andExpect(// (9) response에 대한 기대 값 검증)
.andDo(document(
// (10) API 문서 스펙 정보 추가
));
}
}