일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 쿠버네티스 컨트롤러
- 모캠
- Reducer
- ecs
- 쿠버네티스
- #Swagger-codegen
- fluentd
- #api 문서화
- #Swagger
- docker
- React.js
- AWS
- 모두의캠퍼스
- javascript
- server
- #Swagger-ui
- action
- Redux
- Kubernetes
- #스웨거
- SRE
- 카카오게임즈
- 프로세스 통신
- 프로세스
- 북딜
- 기술PM
- IP
- #Swagger-editor
- React
- Site Reliability engineering
- Today
- Total
탕구리's 블로그
Swagger를 이용해보자! 1편 본문
시작하기 전에
해당 블로그에 작성되는 글은 주인장의 지극히 주관적인 생각이 다수이며, 대부분의 지식은 구글링을 통해 얻고 있기 때문에 옳지않은 정보가 있습니다.
잘못된 부분이나 수정해야 하는 부분이 있다면 과감히 덧글을 남겨주세요! 모르는게 많은 새싹입니다
오늘의 주제
정말 오랜만에 포스팅을 하게된거 같은데 하는일은 없지만 바쁘긴 무쟈게 바쁘다보니 시간이 없었어요. ㅜㅡㅜ
회사 세미나에서 발표를 하게 되어 오랜만에 포스팅을 하게 되었습니다. 오늘은 주제는 "RESTful API 문서화" 하는 방법! 그 이름도 유명한 "Swagger"의 소개와 간단한 사용방법 입니다. 정말 간단하게만 준비하였습니다. 자세하게 적으면 엄청 많아질것 같아서요. 이름에서 마저도 스웩(Swag)이 느껴지네요.
그만 떠들고 얼른 시작하겠습니다.
Swagger?
Swagger의 5가지 기능
(Swagger.io의 메인화면)
API를 디자인 해보자
우선, Swagger.io에 있는 Docs 탭을 통해 문서를 작성하는 기초적인 문법을 확인 할 수 있습니다.
저는 Swagger V2.0을 사용할 것이기 때문에 도큐먼트 옵션을 V2.0으로 변경해 주시고 이동합니다.
(기본은 OpenAPI V3.0입니다.)
페이지를 이동하면 이렇게 다양한 옵션에 대한 설명(좌측), 기능에 대한 예제 코드(우측)이 나타납니다.
Swagger-Editor 이용해 보기
swagger-editor 설치 명령어
docker pull swaggerapi/swagger-editor
docker run -d -p 80:8080 swaggerapi/swagger-editor
도커가 설치되어 있다는 가정하에
Docker Hub에 명시되어 있는 두가지 명령어를 실행하면!
로컬 80포트를 통해 Swagger-editor가 실행되고 있음을 확인할 수 있습니다.
브라우저를 통해 localhost:80포트로 접근을 하면 예쁜 Swagger-editor화면을 확인할 수 있습니다.
저는 yaml형식으로 문서를 작성하고 있으며, JSON형식으로도 작성이 가능하다고 합니다.
이제 API 디자인을 시작해 봅시다!
아래 내용은 Swagger를 이용하기 위한 기본 옵션을 설정해주는 부분입니다.
# 몇 버전의 신텍스를 사용할지 설정해 줍니다. swagger: "2.0" info: version: "0.0.1" title: tistory test # swagger가 실행되고 있는 host를 설정해 줍니다. host: localhost:4000 # url에서 사용할 basePath를 설정해 줍니다. basePath: /api/v1.0 schemes: # 프로토콜을 설정해 주는 곳인데, Production으로 사용시 http를 제거하는 것을 권장합니다. - http - https # 서버로 보낼 데이터의 Content-type을 설정해 줍니다. consumes: - application/json # 클라이언트에게 전송할 데이터의 타입을 설정해 줍니다. produces: - application/json
이제 간단한 API를 작성해 보도록 하겠습니다.
paths: /user/{user_name}: post: tags: - "tag-for-user" summary: "api-summary" description: "swagger-example" consumes: - "application/x-www-form-urlencoded" # parameters에 대한 내용을 명세한 부분 입니다. # 이 부분에서 작성하는 순서는 큰 의미가 없는것 같습니다. # in: path, header, body, query 저는 보통 네가지 형태를 주로 사용합니다. # name : 변수명이라고 생각하시면 됩니다. 위의 네가지 방식을 통해서 넘어오는 변수의 이름입니다. # type : 데이터 타입을 명시해 줍니다. string, boolean, integer, number, array ... 등 여러가지 데이터 타입이 있습니다. # scheme $ref: 밑의 부분의 model 작성을 통해 참조하여 사용 가능합니다. parameters: - name: "user_name" in: "path" description: "spec for user_name" required: true type: "string" - name: "queryString-exam" in: "query" description: "offset for pagination" required: false type: "integer" - name: "header-exam" in: "header" required: true type: "string" - in: "body" name: "user" required: false schema: $ref: "#/definitions/user" # 요청이 들어왔을때 응답에 대한 명세를 표현합니다. # 각 응답 코드별 응답 메시지와 포멧을 설정해 줄 수 잇습니다. responses: 200: description: "status code 200" schema: $ref: "#/definitions/user" 401: description: "Authentication Error" schema: $ref: "#/definitions/SuccessResponse" 500: description: "status code 500" schema: $ref: "#/definitions/ErrorResponse" # Response와 Request에 사용할 Modle을 정의해주는 부분 입니다. # Example 데이터도 삽입이 가능하며 Swagger-Inspecter를 통한 테스트 데이터로 사용됩니다. definitions: user: type: "object" required: - "username" properties: id: type: "integer" description: "The user ID." username: type: "string" description: "The user name." example: id: 0 username: "username" SuccessResponse: properties: code: type: integer status: type: string message: type: string ErrorResponse: properties: code: type: integer status: type: string message: type: string
"Swagger를 이용해보자 1편"에서는 Swagger가 무엇인지,
Swagger는 어떤 기능이 있는지 그리고 Swagger-editor를 통해 기초적인 API를 디자인하는 과정을 배웠습니다.
"Swagger를 이용해보자 2편"에서는 Swagger-codgen을 통해 프로토타입 코드를 만들고
Swagger-ui를 통해 문서화를 하는 방법에 대해서 알아보도록 하겠습니다!
샘플코드주소 : https://github.com/Dongineer/swagger-example
'Server' 카테고리의 다른 글
Nginx는 무슨 역할을 할까? - with willson (0) | 2019.07.18 |
---|---|
Travis CI / AWS codedeploy - with willson (0) | 2019.07.15 |
Swagger를 이용해보자! 2편 (3) | 2018.05.27 |
REST API에 대해 알아보자 (0) | 2017.12.31 |
쿠키(Cookie) (0) | 2017.12.24 |