RestApi 만들기 - 문서 빌드하기 (7)

반응형
반응형

이제 문서를 빌드해보자.
그전에 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를 추가해야되는데 이건 올리지 않겠다 ㅎ;

반응형

댓글

Designed by JB FACTORY