Spring REST Docs
Spring MVC Test๋ฅผ ์ด์ฉํด์ REST API ๋ฌธ์์ ์กฐ๊ฐ(snippets
)์ ์์ฑํ๋๋ฐ ๋์์ ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ธฐ๋ณธ์ ์ผ๋ก Asciidoctor
๋ฅผ ์ฌ์ฉํ์ฌ htmlํ์ผ์ ์์ฑํ๊ณ , ์ํ๋ ๊ฒฝ์ฐ Markdown์ ์ฌ์ฉํ ์ ์๋ค.
API๋ฅผ ์ ์ํ๋๋ฐ ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Swagger
๊ฐ ์๋ค.
Swagger์์ ์ฐจ์ด์
Swagger
๋ API๋ฅผ ํ
์คํธ
ํด๋ณผ ์ ์๋ ํ๋ฉด์ ์ ๊ณต
ํ๊ณ ์ค์ ์ฝ๋
์ ์ด๋
ธํ
์ด์
์ ์ถ๊ฐ
ํด์ผํ์ง๋ง Spring Rest Docs
๋ ํ
์คํธ์ฝ๋๋ฅผ ํตํด ์์ฑ๋๋ฏ๋ก ์ค์ ์ฝ๋์๋ ์ํฅ์ด ์๋ค.
์ฌ์ฉ๋ฒ
MockMvc, WebTestClient๋ฑ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ test์ ์ฌ์ฉํ๋ mockMvc๋ฅผ ๋ง๋ค๋ documentationConfiguration์ ์ฌ์ฉํ์ฌ ์์ฑํ๊ณ MockMvc๋ก ํ ์คํธ ์ค andDo๋ฅผ ์ด์ฉํ์ฌ ์์ฑ
Spring Boot์์๋ ๊ฐ๋จํ
@AutoConfigureRestDocs
๋ง ๋ถ์ฌ์ฃผ๋ฉด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Test๋ด์ฉ์ด ๋ฐ๋๊ฑฐ๋ ๋ค์ ์คํํ ๋๋ง๋ค Overrideํ์ฌ ๋ฌธ์๊ฐ ๋ค์ ์์ฑ๋๋ค.
๋ฉ์๋
andDo(document(โdoc-nameโ, snippets))
snippets
links()
requestParameters() + parameterWithName()
pathParameters() + parametersWithName()
requestParts() + partWithname()
requestPartBody()
requestPartFields()
requestHeaders() + headerWithName()
requestFields() + fieldWithPath()
responseHeaders() + headerWithName()
responseFields() + fieldWithPath()
...
Relaxed* : ๋ชจ๋ ํ๋์ ๋ํด ๊ธฐ์ ํ์ง ์์๋ ๋ฌธ์ํ๋ฅผ ์์ผ์ฃผ๊ธฐ ์ํ prefix
๋ฌธ์ ์ผ๋ถ๋ถ๋ง ํ ์คํธ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ ํํ ๋ฌธ์ํ๊ฐ ๋ถ๊ฐ๋ฅ ํ๋ค.
Processor
preprocessRequest(prettyPrint())
preprocessResponse(prettyPrint())
Customize
jsonํํ๋ฅผ ํ์ค๋ก ํฌ๋งทํ
ํ์ง ์์ ์ฑ๋ก responseํ๊ธฐ ๋๋ฌธ์ ๋ณด๊ธฐ๊ฐ ๋งค์ฐ ๋ถํธํ๊ธฐ ๋๋ฌธ์ ๋ณด๊ธฐ ํธํ๊ฒ foramattingํ์ฌ ์ถ๋ ฅํ๊ฒ RestDocksMockMvcConfigurationCustomizer ๊ตฌํํ ๋น์ ๋ฑ๋ก(๋ด๋ถ์ prettyPrint ์ด์ฉ)ํ์ฌ ์ฌ์ฉํ๊ณ Testํด๋์ค์ @Import(RestDocsConfiguration.class)
์ ํตํด ์์ฑํ ์ปค์คํ
์ค์ ์ ์ ์ฉํด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
build
buildํ๊ธฐ ์ํด dependecny ์ถ๊ฐ
mainํจํค์ง ์๋ asciidoc ํด๋๋ฅผ ๋ง๋ค์ด
index.adoc
ํ์ผ ์์ฑmaven์ package๋ก build
๋น๋ํ๋ฉด
asciidoctor-maven-plugin
์ด asciidocํ์ผ์ html๋ก ๋ง๋ค์ด genreated-docs ์๋index.html
์ด ์์ฑ๋๋ค.maven-resources-plugin
์ ๋ฐ๋ผ build๋ generated-docs์ ์์ฑํ ํ์ผ์ build์ staticํ์ผ ์๋ ์์ฑํด์ค์ผ๋ก์จ spring bootํน์ฑ์ ์ด์ฉํด ์๋ฒ์คํ์ url๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
Reference
https://docs.spring.io/spring-restdocs/docs/2.0.5.RELEASE/reference/html5/
https://narusas.github.io/2018/03/21/Asciidoc-basic.html
Last updated