IT STUDY LOG
블로그 애플리케이션 REST API 작성 본문
#해결 과제
블로그에 필요한 데이터 모델을 디자인하세요. → YAML 파일 수정
블로그 글(Article), 댓글(Comment)에 필요한 필드와 각 필드의 자료형이 무엇인지 정하세요. 스프레드시트로 정리되면 간편합니다.
스프레드시트로 작성한 데이터 모델을 Sheety와 연동하세요. → 구글 스프레드 시트 및 Sheety 사용
Sheety를 통해 블로그에 필요한 API 명세 및 요청/응답을 확인하세요. 블로그에는 다음과 같은 기능을 필요로 합니다.
- 조회
- 블로그 글 전체 조회
- 특정 블로그 글 조회
- 모든 댓글 조회
- 특정 댓글 조회
- 생성
- 새 블로그 글 생성
- 새 댓글 생성
- 삭제
- 특정 블로그 글 삭제
- 특정 댓글 삭제
- 수정
- 특정 블로그 글 수정
- 특정 댓글 수정
API 문서화를 진행하세요. → YAML 파일 완성 후 Swagger 사용
#실습 자료
- 과제 레파지토리 : https://github.com/cs-devops-bootcamp/sprint-open-api-doc
- Swagger : https://app.swaggerhub.com/apis/cs-kimcoding/blog/1.0.0
#과제 항목별 진행 상황
💡 스프레드시트에 시트를 만들고 (Article, Comment 두 개가 필요합니다) 필드와 데이터를 입력해 넣으세요.
💡 과제 repository를 살펴보면, apidoc.yaml 이 존재합니다. 이 문서는 데이터 모델 및 URI Path에 대한 명세서입니다. 다음과 같이 블로그 글, 댓글에 대한 데이터 모델 디자인을 완성하세요.
components: # 데이터 모델
schemas:
Article:
type: object
required:
- article_seq
- title
- content
- user_id
properties:
article_seq:
type: number
example: '1'
title:
type: string
example: '3월 15일의 TIL'
content:
type: string
example: '오늘은 REST API를 배웠다!'
user_id:
type: string
example: 'kimcoding'
reg_date:
type: string
format: date-time
example: '2023-03-23 00:00:00'
mod_user_id:
type: string
example: 'kimcoding'
mod_date:
type: string
format: date-time
example: '2023-03-23 00:00:00'
Comment:
type: object
required:
- comment_seq
- article_seq
- user_id
- content
properties:
comment_seq:
type: number
example: '1'
article_seq:
type: number
example: '1'
user_id:
type: string
example: 'kimcoding'
content:
type: string
example: '열심히 공부하셨군요. 잘 보고 갑니다.'
reg_date:
type: string
format: date-time
example: '2023-03-23 00:00:00'
mod_user_id:
type: string
example: 'kimcoding'
mod_date:
type: string
format: date-time
example: '2023-03-23 00:00:00'
💡 Path에 대한 정보를 완성하세요. (Sheety는 전체 row 조회, 특정 row 조회, 새 row 생성, 특정 row 수정, 특정 row 삭제에 대한 API가 이미 제공되므로 요구 사항의 대부분은 Sheety가 제공하는 대로 적어 넣으면 됩니다.)
paths: # 메서드
# 게시글 관련 메서드
/article:
get: # 블로그 글 전체 조회
description: '블로그 글 전체 조회'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
type: array
items:
$ref: '#/components/schemas/Article'
post: # 새 블로그 글 생성
description: '새 블로그 글 작성'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Article'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
/article/{article_seq}:
get: # 특정 블로그글 조회
description: '특정 블로그글 조회'
parameters:
- name: article_seq
in: path
description: '게시글 seq로 블로그 글 조회'
required: true
schema:
type: integer
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
put: # 특정 블로그글 수정
description: '특정 블로그글 수정'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Article'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
delete: # 특정 블로그글 삭제
description: '특정 블로그글 삭제'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Article'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
/comment: # 댓글 관련 메서드
get: # 모든 댓글 조회 - 특정 글의 모든 댓글
description: '모든 댓글 조회 - 특정 글의 모든 댓글'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
type: array
items:
$ref: '#/components/schemas/Comment'
post: # 새 댓글 생성
description: '새 댓글 작성'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Comment'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Comment'
/comment/{comment_seq}:
get: # 특정 댓글 조회 - 특정 글의 특정 댓글 팝업 가정
description: '특정 댓글 조회 - 특정 글의 특정 댓글 팝업 가정'
parameters:
- name: comment_seq
in: path
description: '댓글 seq로 댓글 조회'
required: true
schema:
type: integer
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Comment'
put: # 특정 댓글 수정
description: '특정 댓글 수정'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Comment'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Comment'
delete: # 특정 댓글 삭제
description: '특정 댓글 삭제'
requestBody:
required: true
content:
application/json:
schema:
type: object
$ref: '#/components/schemas/Comment'
responses:
'200':
description: '성공 응답'
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Comment'
💡 ****YAML 문서의 오류를 찾아내세요. (**node.js 개발환경이 준비되어 있다면, npm test 명령을 통해 openapi.yaml 파일의 오류를 파악할 수 있습니다.)
- swagger editer(https://editor-next.swagger.io/)에 yaml 파일을 업로드하면 코드 창에 밑줄 표시, 디스크립션창에 관련 내용이 나와 에러가 발생한 부분을 교정 가능
- 오류1 : 타입명에서 오타
- 오류2 : date타입의 경우 type: string에 format : date-time으로 지정해야 함
- 오류3 : $ref의 경우 openapi 3.1.0부터 지원
openapi: 3.1.0
info:
description: '블로그 API 문서입니다.'
version: '1.0.0'
title: '블로그 API'
$ npm test
> sprint-open-api-doc-managed@1.0.0 test
> swagger-cli validate openapi.yaml
openapi.yaml is valid
💡 **repository를 fork하고 apidoc.yaml 문서를 완성시킨 후, PR로 제출하세요.
$ git add openapi.yaml
$ git commit -m "openapi"
$ git status
$ git remote -v
$ git push origin
#TROUBLE SHOOTING LOG
📝 문제 1 : npm test 시 에러 발생
$ npm test
> sprint-open-api-doc-managed@1.0.0 test
> swagger-cli validate openapi.yaml
sh: 1: swagger-cli: not found
- 원인 : npm과 swagger 모듈이 다운로드되어있지 않음
- 해결 방안
- sudo apt update : apt 업데이트
- sudo apt install nodejs : node.js 다운
- nodejs -v : 설치 확인
- sudo apt install npm : 노드 매니저 다운
- sudo npm install -g @apidevtools/swagger-cli 다운로드 하여 다시 실행
#참고 자료
https://swagger.io/docs/specification/basic-structure/
https://swagger.io/specification/v3/#schema
https://swagger.io/docs/specification/describing-request-body/
https://swagger.io/docs/specification/describing-parameters/
'devops bootcamp 4 > pair/team log' 카테고리의 다른 글
Sprint - Cozstory WAS 개발 (0) | 2023.03.28 |
---|---|
Mini WAS 개발 hands-on (0) | 2023.03.28 |
CozStory 클라이언트 호스팅 (0) | 2023.03.27 |
nginx Web Server Hands-on (0) | 2023.03.24 |
simple git log (0) | 2023.03.21 |
Comments