개발/SPRING
[Spring] RestDocs로 API 문서화를 간단히 해보자
지잉지잉
2023. 6. 18. 21:58
1. build.gradle.kts 설정
- 추가해야 할 부분만 표시해놓았습니다~
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
...
id("com.epages.restdocs-api-spec") version "0.16.0"
...
}
group = "com.test"
version = "0.0.1-SNAPSHOT"
java {
sourceCompatibility = JavaVersion.VERSION_17
}
repositories {
mavenCentral()
}
dependencies {
...
testImplementation("com.epages:restdocs-api-spec-mockmvc:0.16.2")
}
openapi3 {
this.setServer("https://localhost:8080")
title = "openapi3 test"
description = "테스트 입니당"
version = "0.1.0"
format = "yaml" // or json
}
2. API 작성
- 간단한 테스트용 API를 작성한다.
@RestController
class TestController {
@GetMapping("/test")
fun getTest(@RequestParam name: String, @RequestParam age: Int) = ResponseEntity<TestResponse>(
TestResponse(
200, "Hello $name ($age)."
),
HttpStatus.OK
)
}
3. Test Code 작성
import com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper
import com.epages.restdocs.apispec.ResourceDocumentation.parameterWithName
import com.epages.restdocs.apispec.ResourceSnippetParametersBuilder
import com.epages.restdocs.apispec.SimpleType
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.restdocs.RestDocumentationContextProvider
import org.springframework.restdocs.RestDocumentationExtension
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get
import org.springframework.restdocs.payload.JsonFieldType
import org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath
import org.springframework.test.context.junit.jupiter.SpringExtension
import org.springframework.test.web.servlet.MockMvc
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder
import org.springframework.test.web.servlet.setup.MockMvcBuilders
import org.springframework.web.context.WebApplicationContext
@ExtendWith(RestDocumentationExtension::class, SpringExtension::class)
@SpringBootTest
internal class TestControllerTest {
private lateinit var mockMvc: MockMvc
@BeforeEach
fun setUp(context: WebApplicationContext, restDocumentation: RestDocumentationContextProvider) {
mockMvc = MockMvcBuilders.webAppContextSetup(context)
.apply<DefaultMockMvcBuilder>(MockMvcRestDocumentation.documentationConfiguration(restDocumentation))
.build()
}
@Test
fun `스웨거 테스트`() {
val name = "mark"
val age = 20
mockMvc.perform(
get("/test?name={name}&age={age}", name, age)
)
.andExpect(status().isOk)
.andDo(
MockMvcRestDocumentationWrapper.document(
identifier = "test",
resourceDetails = ResourceSnippetParametersBuilder()
.tag("테스트")
.description("테스트 입니당")
.requestParameters(
parameterWithName("name").description("이름").type(SimpleType.STRING),
parameterWithName("age").description("나이").type(SimpleType.NUMBER),
)
.responseFields(
fieldWithPath("status").type(JsonFieldType.NUMBER).description("The status."),
fieldWithPath("value").type(JsonFieldType.STRING).description("The value."),
),
),
)
}
}
4. run openapi3
- 테스트코드를 작성한 후, openapi3 를 실행한다.
5. openapi3.yaml 확인
- 해당 yaml을 swagger editor(https://editor.swagger.io/)에 붙여넣으면 정상적으로 문서화가 된 것을 확인할 수 있습니다.