Docker와api blueprint+aglio+drakov를 사용하여 API 개발을 가볍게 합니다

개요


웹 API를 개발하려면 appi blueprint와aglio+drakov를 사용하여 문서를 간단하게 만들고 모크 서버를 시작할 수 있는 환경을 구축하십시오.
api blueprint
https://apiblueprint.org/
이쪽 기사를 참고하게 해 주세요.감사합니다!
API Blueprint, drakov, dredd에 API 문서를 작성하면서 mock 서버를 구축하여 추가 테스트를 수행합니다.
https://arata.hatenadiary.com/entry/2018/03/22/204723
이번에 구축된 환경은 GiitHub에 업로드 중이니 참고해주세요.
https://github.com/kai-kou/api-blueprint-use-aglio-darkov

환경 구조


Docker 환경을 준비합니다.
> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> touch Dockerfile
> touch docker-compose.yml
node.js를 사용할 수 있도록 그림을 지정합니다.
aglio와drakov를 설치합니다.
Dockerfile
FROM node:latest

WORKDIR /projects

RUN npm install -g aglio --unsafe-perm
RUN npm install -g drakov
command에서 aglio와drakov를 각각 시작하는 명령을 지정했습니다.
docker-compose.yml
version: '3'

services:
  aglio:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - "./md:/projects"
    tty: true
    command: aglio --theme-variables slate -i index.md -s -h 0.0.0.0
  drakov:
    build: .
    ports:
      - "3001:3001"
    volumes:
      - "./md:/projects"
    tty: true
    command: drakov -f "**/*.md" --public --watch --p 3001

문서 준비


Docker를 시작하기 전에 API 사양을 기술한 파일을 미리 준비합니다.
> mkdir md
> touch md/index.md
> touch md/sample.md
md/index.MD는 Aglio에서 여러 MD 파일을 처리하는 데 사용됩니다.
aglio에서 **/*.md를 지정하면 됩니다, Docker-composie.yml로 지정하면 제대로 시작할 수 없습니다.
md/index.md
<!-- include(sample.md) -->
md/sample.md
# GET /message
+ Response 200 (text/plain)

        Hello World!

Docker 컨테이너 시작


준비가 되었으니 Docker 컨테이너를 시작합니다.
> docker-compose up -d
시동이 걸렸는지 확인해 보겠습니다.
> docker-compose ps

                 Name                                Command               State           Ports
---------------------------------------------------------------------------------------------------------
api-blueprint-use-aglio-darkov_aglio_1    aglio --theme-variables sl ...   Up      0.0.0.0:3000->3000/tcp
api-blueprint-use-aglio-darkov_drakov_1   drakov -f **/*.md --public ...   Up      0.0.0.0:3001->3001/tcp
네.
그럼, 제가 따로 방문해 보겠습니다.
aglio
> open http://localhost:3000/

drakov
> curl -v http://localhost:3001/message

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3001 (#0)
> GET /message HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Drakov API Server
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
< Content-Type: text/plain; charset=utf-8
< Content-Length: 13
< ETag: W/"d-oLZZOWcLwsAQ9NXWoLPk5FkPuSs"
< Date: Mon, 03 Sep 2018 02:19:27 GMT
< Connection: keep-alive
<
Hello World!
* Connection #0 to host localhost left intact
네.각자 시동을 걸고 있다.
일지도 확인해봐야지.
aglio
> docker-compose logs aglio
aglio_1   | Server started on http://0.0.0.0:3000/
aglio_1   | Rendering index.md
aglio_1   | Socket connected
aglio_1   | Refresh web page in browser
aglio_1   | Socket connected
drakov
> docker-compose logs drakov
drakov_1  |    DRAKOV STOPPED
drakov_1  |    DRAKOV STARTED
drakov_1  | [LOG] Setup Route: GET /message
drakov_1  |    Drakov 1.0.4      Listening on port 3001
drakov_1  |    PUBLIC MODE      running publicly
drakov_1  | [LOG] GET /message
drakov_1  | [MATCHING] by url pattern: /message MATCHED
drakov_1  | [DRAKOV] GET /message
drakov_1  | [LOG] GET /message
drakov_1  | [MATCHING] by url pattern: /message MATCHED
drakov_1  | [DRAKOV] GET /message
md/sample.MD의 내용을 변경해 보세요.
md/sample.md
# GET /message
+ Response 200 (text/plain)

        Hello World!!!!!
변경 후 로그를 확인합니다.
aglio
> docker-compose logs aglio
aglio_1   | Updated sample.md
aglio_1   | Rendering index.md
aglio_1   | Refresh web page in browser
aglio_1   | Updated sample.md
aglio_1   | Rendering index.md
aglio_1   | Refresh web page in browser
drakov
> docker-compose logs drakov
drakov_1  | [CHANGE] sample.md Restarting 6
drakov_1  |    DRAKOV STOPPED
drakov_1  |    DRAKOV STARTED
drakov_1  | [LOG] Setup Route: GET /message
drakov_1  |    Drakov 1.0.4      Listening on port 3001
drakov_1  |    PUBLIC MODE      running publicly
변경 테스트 중이지?
aglio
> open http://localhost:3000/

drakov
> curl -v http://localhost:3001/message
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3001 (#0)
> GET /message HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Drakov API Server
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
< Content-Type: text/plain; charset=utf-8
< Content-Length: 17
< ETag: W/"11-dSdq9EnT5dkGNunArS5pSGaVctI"
< Date: Mon, 03 Sep 2018 02:23:53 GMT
< Connection: keep-alive
<
Hello World!!!!!
* Connection #0 to host localhost left intact
각각 변경을 반영했다.
md 파일을 추가하려고 시도합니다.
> touch md/sanple2.md
> vi md/sanple2.md
> vi md/index.md
md/sanple2.md
# GET /message2
+ Response 200 (text/plain)

        Hello World!!!
md/index.md
<!-- include(sample.md) -->
<!-- include(sample2.md) -->
추가 반영이 있는지 확인해 보겠습니다.
aglio
> open http://localhost:3000

drakov
> curl -v http://localhost:3001/message2
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 3001 (#0)
> GET /message2 HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Drakov API Server
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
< Content-Type: text/plain; charset=utf-8
< Content-Length: 16
< ETag: W/"10-DyKYcjpVzlBcpDK0SJCKLaPPxvE"
< Date: Mon, 03 Sep 2018 02:29:31 GMT
< Connection: keep-alive
<
Hello World!!!!
* Connection #0 to host localhost left intact
네.느낌이 좋다.
파일을 업데이트하거나 추가할 때 프로세스가 떨어질 때가 있습니다.
이제 다음 명령을 사용하여 재부팅할 수 있습니다.
> docker-compose start

Starting aglio  ... done
Starting drakov ... done
그럼 좋은 appi blueprint 개발 생활 되세요^^

좋은 웹페이지 즐겨찾기