Programming/Backend

4.Flask restx 적용 + Swagger

meaningful_life 2022. 5. 29. 22:29
728x90

4.Flask restx 적용 + Swagger

flask restful을 적용하고, Swagger 적용이 되도록 하겠습니다.

https://github.com/kschoi93/flask-example

 

flask restx 패키지 설치

pip install flask-restx

 

__init__.py 파일에 코드 추가 및 수정

from flask import Flask
from flask_restx import Api
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

api = Api(
    version='1.0',
    title='toy_project',
    prefix='/api',
    contact='',
    contact_email='email address',
    description="desc",
)
db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)

    # rest api
    api.init_app(app)

    # config
    config = app.config.get('ENV')
    if config == 'production':
        app.config.from_object('config.ProductionConfig')
    elif config == 'testing':
        app.config.from_object('config.TestingConfig')
    else:
        app.config.from_object('config.DevelopmentConfig')

    # database
    from toy.models import example_models
    db.init_app(app)
    migrate.init_app(app, db)

    # routes list
    from .routes import routes_list
    routes_list(api)

    return app

 

toy.controllers.example_controllers.py 파일 수정

from flask_restx import Namespace, Resource

import toy.services.example_services as example_services

example = Namespace(name='example', path='/example', description='This api is Example for first')

@example.route('/')
class ExampleRoute(Resource):
    def get(self) -> str:
        """return hello world"""
        data = 'hello_world'
        result = example_services.example_route(data=data)
        return {"result": result}

@example.route('/<int:user_number>')
@example.doc(params={'user_number': '파라미터로 입력된 숫자'})
@example.header('content-type', 'application/json')
class ExampleRouteAddParam(Resource):
    @example.response(200, description='입력 받은 파라미터를 제곱하여 반환한다')
    def get(self, user_number: int) -> str:
        """return parameter calculator"""
        print(user_number)
        result = example_services.example_route_add_param(data=user_number)
        print(result)
        return {"result": result}

 

다음 주소 접속 시 다음과 같이 Swagger documentation 출력

http://127.0.0.1:5000

728x90