[웹서버] Flask + REST API + Swagger

 
 
 
 

Python 경량 웹프레임워크 Flask를 이용하여 REST API를 만들고

Swagger를 이용하여 API Spec를 웹으로 조회할 수 있도록 합니다.

아래 순서로 진행하겠습니다.

1) 미니아나콘다 도커 이미지를 가져오고 실행합니다.

2) 필요한 모듈을 설치합니다.

3) 소스코드를 작성합니다.

4) 실행합니다.

1) 미니콘다 도커 이미지를 가져오고 실행합니다.

# 최신 미니콘다 이미지를 가져온다
docker pull continuumio/miniconda3:4.6.14
# 9991포트(변경 가능) 오픈&매핑한다. 볼륨(변경 가능)을 연결하고 bash를 실행한다
docker run -it -p 9991:9991 -v C:\workspace\:/workspace/ continuumio/miniconda3:4.6.14 bash

2) 필요한 모듈을 설치합니다.

# apt-get 업데이트한다
apt-get update
# vim 을 설치한다 apt-get install -y vim
# conda 업데이트한다
conda update -y conda
# flask를 설치한다
conda install -y flask
# flask-1.0.3, jinja2-2.10.1, werkzeug-0.15.4 설치됨
# itsdangerous-1.1.0, markupsafe-1.1.1, click-7.0 설치됨
# pip 업데이트한다
pip install --upgrade pip
# flask-restplus 설치한다
pip install flask-restplus
# flask-restplus-0.12.1, aniso8601-7.0.0, attrs-19.1.0 설치됨
# jsonschema-3.0.1, pyrsistent-0.15.2, pytz-2019.1 설치됨

3) 소스코드를 작성합니다.

cd /workspace
vim app.py

[app.py 파일]

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

# 필요한 모듈을 불러온다
from flask import Flask, request
from flask_restplus import Api, Resource, fields
 
app = Flask(__name__# Flask App 생성한다
api = Api(app, version='1.0'title='상품 관리 API'description='상품 등록,수정,삭제,조회 API입니다'# API 만든다
ns  = api.namespace('goods'description='상품 등록,수정,삭제,조회'# /goods/ 네임스페이스를 만든다
 
# REST Api에 이용할 데이터 모델을 정의한다
model_goods = api.model('row_goods', {
    'id': fields.Integer(readOnly=Truerequired=Truedescription='상품번호'help='상품번호는 필수'),
    'goods_name': fields.String(required=Truedescription='상품명'help='상품명은 필수')
})
 
class GoodsDAO(object):
    '''상품정보 Data Access Object'''
    def __init__(self):
        self.counter = 0
        self.rows    = []
 
    def get(selfid):
        '''id를 이용하여 상품정보 조회한다'''
        for row in self.rows:
            if row['id'] == id:
                return row
        api.abort(404"{} doesn't exist".format(id))
 
    def create(selfdata):
        '''신규 상품을 등록한다'''
        row = data
        row['id'] = self.counter = self.counter + 1
        self.rows.append(row)
        return row
 
    def update(selfiddata):
        '''입력 id의 data를 수정한다'''
        row = self.get(id)
        row.update(data)
        return row
 
    def delete(selfid):
        '''입력 id의 data를 삭제한다'''
        row = self.get(id)
        self.rows.remove(row)
 
DAO = GoodsDAO() # DAO 객체를 만든다
DAO.create({'goods_name''삼성 노트북 9'}) # 샘플 1 데이터 만든다
DAO.create({'goods_name''LG 노트북 gram'}) # 샘플 2 데이터 만든다

@ns.route('/'# 네임스페이스 x.x.x.x/goods 하위 / 라우팅
class GoodsListManager(Resource):
    @ns.marshal_list_with(model_goods)
    def get(self):
        '''전체 리스트 조회한다'''
        return DAO.rows
 
    @ns.expect(model_goods)
    @ns.marshal_with(model_goods, code=201)
    def post(self):
        '''새로운 id 추가한다'''
        # request.json[파라미터이름]으로 파라미터값 조회할 수 있다
        print('input goods_name is', request.json['goods_name'])
        return DAO.create(api.payload), 201

@ns.route('/<int:id>'# 네임스페이스 x.x.x.x/goods 하위 /숫자 라우팅
@ns.response(404'id를 찾을 수가 없어요')
@ns.param('id''상품번호를 입력해주세요')
class GoodsRUDManager(Resource):
    @ns.marshal_with(model_goods)
    def get(selfid):
        '''해당 id 상품정보를 조회한다'''
        return DAO.get(id)
 
    def delete(selfid):
        '''해당 id 삭제한다'''
        DAO.delete(id)
        return ''200
 
    @ns.expect(model_goods)
    @ns.marshal_with(model_goods)
    def put(selfid):
        '''해당 id 수정한다'''
        return DAO.update(id, api.payload)

# flask명령어를 실행한다
FLASK_APP=app.py flask run -h 0.0.0.0 -p 9991

브라우져를 이용하여 접속해 봅니다.

http://127.0.0.1:9991

전체 리스트를 조회해 봅니다.( GET /goods/ )

Try it out 버튼을 클릭하거나 아래 curl 명령어로 호출할 수 있습니다.

curl -X GET "http://127.0.0.1:9991/goods/"

전체 리스트가 조회되었습니다

id 2번만 조회해 봅니다. ( GET /goods/{id} )

Try it out 버튼을 클릭하거나 아래 curl 명령어로 호출할 수 있습니다.

curl -X GET "http://127.0.0.1:9991/goods/2"

2번 상품 LG노트북 gram을 확인할 수 있습니다

끝.

[출처] https://blog.naver.com/wideeyed/221571623994

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
58 [python][flask] (flask) windows에서 flask와 apache 연동 file 졸리운_곰 2023.01.17 354
57 [Python][flask] Flask 로 Rest API 구현하기 - 개발환경구축 file 졸리운_곰 2022.12.24 848
56 [python][flask] bitnami의 django 서버로 flask 서비스 file 졸리운_곰 2021.12.10 592
» [웹서버] Flask + REST API + Swagger file 졸리운_곰 2021.04.04 431
54 Python Flask 로 간단한 REST API 작성하기 file 졸리운_곰 2021.04.04 769
53 [파이썬][Flask] [번역] Flask 에서 백그라운드 작업을 처리하는 방법 file 졸리운_곰 2021.03.04 901
52 FLASK를 이용하여 PYTHON에서 PYTORCH를 REST API로 배포하기 졸리운_곰 2021.02.09 454
51 [flask 트랜드 홈페이지 개발] 10 - 다음 뉴스 키워드로 크롤링 file 졸리운_곰 2020.12.03 399
50 [python 트랜드 홈페이지개발] 9 - Flask POST file 졸리운_곰 2020.12.03 344
49 [python 트랜드 홈페이지개발] 8 - 약간의 레이아웃 설정하기 file 졸리운_곰 2020.12.03 518
48 [python 트랜드 홈페이지개발] 7 - 개요 file 졸리운_곰 2020.12.03 550
47 [python 트랜드 홈페이지개발] 6 - href 연결하기 file 졸리운_곰 2020.12.03 604
46 [python 트린드 홈페이지개발] 5 - 다른 페이지 크롤링 file 졸리운_곰 2020.12.01 506
45 [python 트린드 홈페이지개발] 4 - flask에 css 적용하기 file 졸리운_곰 2020.12.01 569
44 [python 트린드 홈페이지개발] 3 - 크롤링한 데이터 html에 보여주기 file 졸리운_곰 2020.12.01 546
43 [python 트린드 홈페이지개발] 2 - flask 프로젝트 생성, 세팅 file 졸리운_곰 2020.12.01 460
42 [python 트린드 홈페이지개발] 1 - 트렌드 홈페이지 개발 개요 file 졸리운_곰 2020.12.01 450
41 Flask 에서 CKEditor 파일첨부 연동 졸리운_곰 2020.11.26 631
40 플라스크 (Flask) - 회원가입 기능 만들기 (MVC 패턴 ) file 졸리운_곰 2020.11.26 518
39 Simple Python Flask Program with MongoDB file 졸리운_곰 2020.11.07 441
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED