flask로 만든 API의 사양을 flask-restx를 이용하여 웹문서화(Swagger)를 할수있다. 

blueprint와 flask-restx를 같이 설정하는 방법을 아래에 정리하였다. 

빨강은 blueprint

녹색은 flask-restx

부분을 확인하면 된다. 

import logging.config
from flask import Flask

from application01.app01 import app_01
from application02.app02 import app_02

logging.config.fileConfig('logging.conf')
logger = logging.getLogger()

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

app.register_blueprint(app_01, url_prefix='/a_01')
app.register_blueprint(app_02, url_prefix='/a_02')

if __name__ == '__main__':
    
    import sys
    args = sys.argv
    app.run(host=args[1], port=args[2])
    # app.run(host='0.0.0.0', port=4000)
import logging
from flask import Blueprint, request, jsonify
from flask_restx import Api, Resource, fields

logger = logging.getLogger()

app_01 = Blueprint('app_01', __name__)

api = Api(app_01, version="1.0", title="app01 API", description="app01 api description",)
ns = api.namespace("ns01_app", description="app01 api description")

@ns.route('/app01', methods=['POST'])
@api.doc(responses={404: "App not found"}, params={"APP_id": "The App ID"})
class app01(Resource):

    def post(self):
        return jsonify(status='POST OK')

import logging
from flask import Blueprint, request, jsonify
from flask_restx import Api, Resource, fields

logger = logging.getLogger()

app_02 = Blueprint('app_02', __name__)

api = Api(app_02, version="1.0", title="app02 API", description="app02 api description",)
ns = api.namespace("ns02_app", description="app02 api description")

@ns.route('/app02', methods=['POST'])
@api.doc(responses={404: "App not found"}, params={"APP_id": "The App ID"})
class app02(Resource):

def post(self):
     return jsonify(status='POST OK')

 

https://github.com/kimjisuu/Flask-blueprint-restx

'Flask' 카테고리의 다른 글

Flask 시작하기  (0) 2021.10.14

Flask는 간단하게 Rest api를 만들수 있게 되어있다. 

소스를 보면 Flask의 이용이 얼마나 간단한지 알수있다. 

폴더의 구조는 아래와 같으며, 폴더별로 Rest Api를 별도로 정의할수 있게 한다. 

run.py
└─application01
      └app01.py ( Rest Api:app_01)
└─application02
      └app02.py ( Rest Api:app_02 )

app01.py

import logging
from flask import Blueprint, request, jsonify

app_01 = Blueprint('app_01', __name__)
logger = logging.getLogger()

@app_01.route('/app', methods=['POST'])
def app():
    try:
        param = request.get_json()
        logger.info(f'##########################')
        logger.info(f'app01')
        logger.info(f'##########################')
        logger.info(f'[REQ] {param}')

        return jsonify(status='OK')
    except Exception as e:
        logger.fatal(f'【システムエラー】{str(e)}:{str(request.get_json())}')
        return jsonify(status='NG', error_code=500, message='【システムエラー】処理に失敗しました。\n{}'.format(str(e)))

app02.py

import logging
from flask import Blueprint, request, jsonify

app_02 = Blueprint('app_02', __name__)
logger = logging.getLogger()


@app_02.route('/app', methods=['POST'])
def app():
try:
param = request.get_json()
logger.info(f'##########################')
logger.info(f'app02')
logger.info(f'##########################')
logger.info(f'[REQ] {param}')

return jsonify(status='OK')
except Exception as e:
logger.fatal(f'【システムエラー】{str(e)}:{str(request.get_json())}')
return jsonify(status='NG', error_code=500, message='【システムエラー】処理に失敗しました。\n{}'.format(str(e)))

run.py

import logging.config
from flask import Flask

from application01.app01 import app_01
from application02.app02 import app_02

logging.config.fileConfig('logging.conf')
logger = logging.getLogger()

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False

app.register_blueprint(app_01, url_prefix='/app_01')
app.register_blueprint(app_02, url_prefix='/app_02')

if __name__ == '__main__':

import sys
args = sys.argv
app.run(host=args[1], port=args[2])
# app.run(host='0.0.0.0', port=4000)

실제소스는 아래에서 다운받을수 있다.

GitHub - kimjisuu/Flask

'Flask' 카테고리의 다른 글

Flask의 웹문서를 만들기(Flask-restx)  (0) 2021.10.17

+ Recent posts