언어 및 프레임워크/Python 3

Flask - Swagger UI 연동

개발참치 2021. 9. 12.
Flask 프로젝트에 Swagger-UI를 연동하는 방법을 최신 자로 공유해드리려 합니다.

 

 

프로젝트 생성

 

우선 Flask 프로젝트를 하나 생성해줍니다.

 

from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

 

flask_restx 설치

 

후에 cmd창을 이용하여, 프로젝트에 flask_restplus가 아닌 flask_restx를 설치해 줍니다.

 

이 곳이 현재 Swagger UI 설치 중 가장 걸리는 부분 중 하나입니다.

그동안은 flask_restplus를 이용하여 Swagger UI를 이용하였지만, flask_restplus는 2020년을 마지막으로 서비스 종료되었습니다. 

그로 인하여 flask_restplus의 백업 모듈이라고 할 수 있는 flask_restx를 이용하여 Swagger를 사용해야 합니다.

 

pip install flask_restx

 

경로 설정

 

추후, 주요 기능을 import 해준 뒤 문서가 생성될 경로를 설정해 줍니다.

 

 

from flask import Flask
// 추가 부분
from flask_restx import Api, Resource, reqparse

app = Flask(__name__)

// 추가 부분
api = Api(app, version='1.0', title='API 문서', description='Swagger 문서', doc="/api-docs")


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

 

namespace 생성

 

api를 분류해줄 namespace를 생성해 줍니다.

 

from flask import Flask
from flask_restx import Api, Resource, reqparse

app = Flask(__name__)

api = Api(app, version='1.0', title='API 문서', description='Swagger 문서', doc="/api-docs")

//추가 부분
test_api = api.namespace('test', description='조회 API')

@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

 

Swagger UI에 API 등록

 

api를 Class로 변경해주고, namespace.route로 변경하는 등 아래와 같은 설정으로 바꿔줍니다.

 

주의 - 함수명이 get, post, put, del 등 RESTful API의 Method가 아니면 Swagger UI에 나타나지 않습니다.

 

from flask import Flask
from flask_restx import Api, Resource, reqparse

app = Flask(__name__)

api = Api(app, version='1.0', title='API 문서', description='Swagger 문서', doc="/api-docs")

test_api = api.namespace('test', description='조회 API')


//변경 부분
@test_api.route('/')
class Test(Resource):
    def get(self):
    	return 'Hello World!'


if __name__ == '__main__':
    app.run()

 

Swagger UI 확인

위 설정한 경로를 들어가서 (default - http://localhost:5000/api-docs) 생성된 Swagger UI를 확인해 줍니다.

 

 

댓글