RestApi 만들기 - 문서 빌드하기 (7)
- 카테고리 없음
- 2021. 2. 27. 03:29
이제 문서를 빌드해보자.
그전에 pom.xml에 다음을 작성하자.
<build>
<plugins>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<version>1.5.8</version>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<backend>html</backend>
<doctype>book</doctype>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-asciidoctor</artifactId>
<version>${spring-restdocs.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<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>
</plugins>
</build>
만약에 버전이 맞지 않는다면, 다른 버전으로 교체해주자.
1. asciidoctor-maven-plugin라는 녀석이 asciidoc을 만들어준다.
어떻게 만들어 주는지 살펴보자.
executions : 실행
2. generate-docs docs를 만든다.
이 단계에서 패키지를 준비한다고 한다.
그리고 이것의 목표는 process-asciidoc라고 한다.
이것은 html형식으로 구성되어있으며, 책과 비슷하게 제작된다고 한다.
위 내용을 spring-restdocs-asciidoctor가 처리해준다.
즉 spring-restdocs-asciidoctor에서 위 플러그인을 실행해준다.
이것이 첫 번째 플러그인
첫 번째 플러그인의 내용을 보면, asciidoc이 보이는데,
이는 이러한 내용이 포함되어야 된다는 뜻이다.
결국 위 플러그인이 asciidoc이라는 폴더를 찾구,
그 아래에 존재하는 adoc을 실행시키는 것 같다.
참고로 이름은 다른걸로해도 무방하다.
내용을 보자.
= REST API Guide
klom;
:doctype: book
:icons: font
:source-highlighter: highlightjs
:toc: left
:toclevels: 4
:sectlinks:
:operation-curl-request-title: Example request
:operation-http-response-title: Example response
[[overview]]
= 개요
[[overview-http-verbs]]
== HTTP 동사
본 REST API에서 사용하는 HTTP 동사(verbs)는 가능한한 표준 HTTP와 REST 규약을 따릅니다.
|===
| 동사 | 용례
| `GET`
| 리소스를 가져올 때 사용
| `POST`
| 새 리소스를 만들 때 사용
| `PUT`
| 기존 리소스를 수정할 때 사용
| `PATCH`
| 기존 리소스의 일부를 수정할 때 사용
| `DELETE`
| 기존 리소스를 삭제할 떄 사용
|===
[[overview-http-status-codes]]
== HTTP 상태 코드
본 REST API에서 사용하는 HTTP 상태 코드는 가능한한 표준 HTTP와 REST 규약을 따릅니다.
|===
| 상태 코드 | 용례
| `200 OK`
| 요청을 성공적으로 처리함
| `201 Created`
| 새 리소스를 성공적으로 생성함. 응답의 `Location` 헤더에 해당 리소스의 URI가 담겨있다.
| `204 No Content`
| 기존 리소스를 성공적으로 수정함.
| `400 Bad Request`
| 잘못된 요청을 보낸 경우. 응답 본문에 더 오류에 대한 정보가 담겨있다.
| `404 Not Found`
| 요청한 리소스가 없음.
|===
[[overview-errors]]
== 오류
에러 응답이 발생했을 때 (상태 코드 >= 400), 본문에 해당 문제를 기술한 JSON 객체가 담겨있다. 에러 객체는 다음의 구조를 따른다.
include::{snippets}/errors/response-fields.adoc[]
예를 들어, 잘못된 요청으로 이벤트를 만들려고 했을 때 다음과 같은 `400 Bad Request` 응답을 받는다.
include::{snippets}/errors/http-response.adoc[]
[[overview-hypermedia]]
== 하이퍼미디어
본 REST API는 하이퍼미디어와 사용하며 응답에 담겨있는 리소스는 다른 리소스에 대한 링크를 가지고 있다.
응답은 http://stateless.co/hal_specification.html[Hypertext Application from resource to resource. Language (HAL)] 형식을 따른다.
링크는 `_links`라는 키로 제공한다. 본 API의 사용자(클라이언트)는 URI를 직접 생성하지 않아야 하며, 리소스에서 제공하는 링크를 사용해야 한다.
[[resources]]
= 리소스
[[resources-index]]
== 인덱스
인덱스는 서비스 진입점을 제공한다.
[[resources-index-access]]
=== 인덱스 조회
`GET` 요청을 사용하여 인덱스에 접근할 수 있다.
operation::index[snippets='response-body,http-response,links']
[[resources-events]]
== 이벤트
이벤트 리소스는 이벤트를 만들거나 조회할 때 사용한다.
[[resources-events-list]]
=== 이벤트 목록 조회
`GET` 요청을 사용하여 서비스의 모든 이벤트를 조회할 수 있다.
operation::get-events[snippets='response-fields,curl-request,http-response']
[[resources-events-create]]
=== 이벤트 생성
`POST` 요청을 사용해서 새 이벤트를 만들 수 있다.
operation::create-event[snippets='request-fields,curl-request,http-request,request-headers,http-response,response-headers,response-fields']
[[resources-events-get]]
=== 이벤트 조회
`Get` 요청을 사용해서 기존 이벤트 하나를 조회할 수 있다.
operation::get-event[snippets='request-fields,curl-request,http-response']
[[resources-events-update]]
=== 이벤트 수정
`PUT` 요청을 사용해서 기존 이벤트를 수정할 수 있다.
operation::update-event[snippets='request-fields,curl-request,http-response']
이것은 전적으로 백기선님의 자료입니다.
3. 그리고 나서 다음 플러그인을 실행시켜준다.
리소스를 만들어주는 플러그인이다.
maven-resources-plugin
4.copy-resources로 리소스를 복사해준다.
그러면 어떤 리소스를 복사해주는가..
이건 아마도 저번에 작성했던 테스트코드에서 만든 것을 말하는 것 같다.
리소스는 ${project.build.directory}/generated-docs
이곳에 저장이 되어있는데,
이러한 내용은 ${project.build.outputDirectory}/static/docs에 복사된다.
근데 아직은 없다.
그러면 어떻게 해야할까?
패키지 시키면 된다.
그러면
이렇게 된다.
자 열어보자.
근데 나는 이렇게 나온다.
이것을 해결하기 위해서는
document의 이름명을 수정해주면 된다.
참고로
이런식으로 경로를 친절하게 알려준다. 이건 패키지한 결과입니다.
대표적으로 index를 해보자.
이렇게 확인할 수 있다.
물론 100% 처리한것이 아니기 때문에 위 빨간 글씨는 계속 보인다.
안 보일때 까지 하면 된다.
이제 profile를 추가해야되는데 이건 올리지 않겠다 ㅎ;