13. made by jylee 13
API-Guide.adoc
include
maven-resources-plugin
API-Guide.html*documentation.java
@Test
//단위테스트
document(“index”)
Snippets
Spring REST Docs!
~asciiDotor~
14. made by jylee 14
REST Docs 시작하기 - 설정
1. Spring Starter Project로 새로운 Spring 프로젝트를 생성
- STS : 우클릭/new/Spring Starter Project
2-1. Spring Boot로 생성시 REST Docs 체크
2-2. pom.xml에서 Maven dependency 추가 설정 (RESTDocs)
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<version>1.0.1.RELEASE</version>
<scope>test</scope>
</dependency>
15. made by jylee 15
REST Docs 시작하기 - 설정
3. pom.xml 파일에서 snippetsDirectory 설정
- 프로젝트가 빌드되는 곳(target)에 디렉토리 생성
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<snippetsDirectory>
${project.build.directory}/generated-snippets
</snippetsDirectory>
<spring-restdocs.version>
1.1.0.BUILD-SNAPSHOT
</spring-restdocs.version>
</properties>
16. made by jylee 16
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-1. maven-surefire-plugin 설정
- surefire 플러그인은 단위테스트를 위한 플러그인
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Documentation.java</include>
</includes>
</configuration>
</plugin>
17. made by jylee 17
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-2. asciidoctor-maven-plugin 설정
- asciiodctor 문법을 사용하기 위한 plugin 설정
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.3</version>
<executions><execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals><goal>process-asciidoc</goal></goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
<attributes>
<snippets>${project.build.directory}/generated-snippets</snippets>
</attributes>
</configuration>
</execution></executions>
</plugin>
18. made by jylee 18
REST Docs 시작하기 - 설정
4. pom.xml 파일에서 plugin 설정
4-3. maven-resources-plugin 설정
- Asciidoctor플러그인 후에 동작되어야 함
- phase(prepare-package)에 묶임
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions><execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}/static/docs</outputDirectory>
<resources>
<resource>
<directory>${project.build.directory}/generated-docs</directory>
</resource>
</resources>
</configuration>
</execution></executions>
</plugin>
19. made by jylee 19
REST Docs 시작하기 - MockMVC
1. *documentation.java 파일을 생성
2. 단위 테스트 작성
@Test
public void test() throws Exception{
//해당 url을 실행
this.mockMvc.perform(get("/member/").accept(MediaType.APPLICATION_JSON))
//응답 성공을 가정
.andExpect(status().isOk())
//설정한 output 디렉토리 하위에 index 디렉토리를 생성 후 snippets를 생성
.andDo(document("index"));
}
20. made by jylee 20
REST Docs 시작하기 – 프로젝트 빌드
1. Target/generated-snippets/ 하위 루트에
작성한 MockMVC에서 작성한 document의 파라미터 확인
.andDo(document("index"));
21. made by jylee 21
REST Docs 시작하기 – asciidoc 작성
1. Src/main/asciidoc 하위 폴더에 api-guide.adoc 생성
2. Asciidoc 레퍼런스 문서를 참고하여 작성
- http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
3. 생성된 Target/generated-snippets/ 하위 루트의 내용을 include
4. 프로젝트 재 시작 후 http://localhost:8080/docs/api-guide.html URL 실행
==== 응답 예제
include::{snippets}/index/http-response.adoc[]
22. made by jylee 22
참고 사이트
http://millky.com/@origoni/post/1155?language=ko_kr
http://kimseunghyun76.tistory.com/389
http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/
http://www.slideshare.net/OrdinaORAJ/spring-rest-docs-documenting-restful-apis-using-your-tests-devoxx
Hinweis der Redaktion
안녕하세요 플랫폼서비스개발2팀의 이주연입니다.
오늘은 spring rest docs에 대해 발표하겠습니다
Api는 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세이며
Api 문서화는 그 api의 로직을 문서로 기록하는 것입니다
쉽게 이런 문서들이 api 문서입니다.
Api문서화 툴로는 에이피아이독,아이오독,스웨거,위키가 있지만 위키는 엄연히 api문서화를 위한 툴이 아니니 논외로 하겠습니다.
에이피아이독은 코드 주석으로 api를 작성하는 도구로 각 언어의 주석 스타일을 바탕으로 작성이 가능합니다.
그러나 손수 주석을 작성해야 하며, 개발자마다 주석 스타일이 다르고
상용화된 지 오래 되지 않은 툴로 사용자가 적어 정보를 얻기도 힘들며
아직까지 이슈사항이 생기는 것으로 보아 조금 더 테스트가 필요한 단계인 것 같습니다.
아이오 독은 Json으로 api를 기술해주는 기술로 이렇게 손수 일일이 작성해주어야 합니다.
node.js와 레디스 서버를 필요로 하기때문에 node.js와 레디스 서버를 이미 설치해서 사용한다면 모를까
문서화 작업 때문에 설치하기엔 조금 부담이 있습니다.
스웨거는 어노테이션을 기반으로 한 문서화이기 때문에 개발 코드에 어노테이션을 추가하여 문서화를 진행합니다.
그렇기 때문에 개발 기능과 문서와의 싱크가 어느정도 맞으나 소스코드는 이렇게 복잡해집니다.
때때로 복잡한 기능의 api를 구현하기 위해 현재 개발 코드가 아닌 다른 코드에 작업이 필요해진다면
문서화를 위한 작업으로는 너무 많은 양의 작업이 필요해집니다.
이렇다 할 API 문서 툴이 없는 상황에서 스프링이 내놓은 툴이 spring rest docs입니다.
Spring rest docs은 아스키닥터의 문법과 단위테스트를 사용하여 api 문서화를 도와주는 도구입니다.
Spring rest docs를 사용하여 api를 문서화하면 최종적으로 이런 화면을 보여주게 됩니다.
기존에 사용하던 위키 api와 비슷한 형태입니다.
spring rest docs의 설정에 대해 전체적인 이해를 돕기 위한 그림입니다.
각각의 3개의 파일이 있습니다.
도큐멘테이션자바파일에서 단위테스트를 하고 그에 대한 결과를 snippets으로 생성합니다.
아스키닥터 문법을 사용하여 작성한 api 문서에 생성한 snippets을 필요한 부분에 인쿠르드시켜줍니다.
그리고 프로젝트 빌드를 하게 되면 메이븐 리소스 플러그인의 설정으로 html이 생성되고 매핑이 됩니다.
그럼 spring rest docs을 시작하기에 앞서 샘플에 대한 설정부분은 모두 스프링 공식사이트의 spring data rest sample을 참고하였습니다.
spring project으로 시작할 때는 rest Docs에 체크하고 maven project로 시작할 때는 pom.xml에서 rest doc에 대한 디펜던시를 추가 설정해줍니다.
다음으로 Pom.xml 파일에서 snippetsDirectory를 설정합니다.
이 설정은
발생한 snippets에 대한 output 위치를 표시하는 프로퍼티로
설정한 디렉토리 하위에 조각들이 생성됩니다.
현재는 타겟 하위의 generated-snippets 디렉토리가 snippets디렉토리입니다.
다음으로 pom.xml에서 plugin을 설정합니다.
Surefire 플러그인은 단위테스트를 위한 플러그인으로 해당 설정에서는 documentation.java파일을 단위테스트에 포함시킨다는 설정입니다.
다음으로 아스키닥터 플러그인에 대한 설정입니다.
앞서 말씀드린 듯 spring rest doc은 아스키닥터의 문법을 사용하기 때문에 해당 플러그인을 설정해주어야 하며
Api문서를 작성할 때 snippets을 인용하기 때문에
Snippets 태그로 이전에 설정한 snippetsDirectory를 설정해 주어야합니다.
다음으로는 리소스 플러그인에 대한 설정입니다.
해당 플러그인은 디렉토리 태그로 설정된 대상을 아웃풋디렉토리 태그로 설정된 대상에 리소스를 복사합니다.
이 설정으로 아스키문법을 사용하여 만든 문서가 html로 변환이 되고 static/docs으로 카피 되어 자동으로 맵핑됩니다.
주의할 점은 리소스 플러그인에 대한 설정은 아스키닥터 플러그인이 설정된 후에 설정이 되어야 합니다.
기능을 만든 후 이전에 단위테스트에 포함시키기로 했던 documentatio자바 파일을 생성하고 단위테스트를 작성합니다.
작성 후 프로젝트를 빌드하면