Coding History/project

Swagger와 비슷한~ Flask-restx 파이썬 프로젝트에 적용하기

BlackBirdIT 2024. 12. 1. 02:16

최근 스웨거를 배웠음. 그래서 내 파이썬 프로젝트에 적용해서 경로 명세서를 제공하면 아주 좋겠다는 생각이들었음,

그래서 보니까 파이썬에는 Flask-restx라는게 있더라고?

적용하러 가보자.

pip install flask-restx && pip freeze > requirements.txt

설치부터 진행했음.

설치 이후에는 routes.py에서 블루프린트에 대한 설정을 추가해줌.

# Blueprint 생성
main = Blueprint('main', __name__)

기존엔 이거밖에 없었는데

from flask_restx import Api, Resource, reqparse

# Flask-RestX API 객체 생성
api = Api(main, version='1.0', title='Astronomical Events API', description='API Documentation for Astronomical Events')

# 엔드포인트 네임스페이스 생성
ns = api.namespace('api', description='Astronomical Endpoints')

요거 추가해줌.

이후에 모든 엔트포인트를

@main.route('/api/constellations', methods=['GET'])
@main.route('/api/sunrise_sunset', methods=['GET'])
@main.route('/api/planet_visibility', methods=['GET'])
@main.route('/api/opposition', methods=['GET'])
@main.route('/api/update_raw_data', methods=['POST'])
@main.route('/api/comet_approach', methods=['GET'])
@main.route('/api/meteor_shower', methods=['GET'])
@main.route('/api/update_meteor/raw_data', methods=['POST'])
@main.route('/api/meteor_shower_visibility', methods=['GET'])
@main.route('/api/moon_phase', methods=['GET'])

main으로 받고있었는데 @ns.route로 교체해주면 됨...

하나하나 다 교체 완료 했고,

제일 짧은 코드 하나만 예시로 보자면,

@ns.route('/update_raw_data')
class UpdateRawDataResource(Resource):
    @staticmethod
    def post():
        """
        행성의 대접근 이벤트 데이터를 업데이트하는 API 엔드포인트
        """
        try:
            update_raw_data()
            return {"message": "Opposition events data update started successfully."}, 200
        except Exception as e:
            return {"error": str(e)}, 500

이런 느낌으로 수정됨.

그리고 이제 __init__.py에 새로 등록해줌.

# Flask 앱 초기화

from flask import Flask
from flask_caching import Cache
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine

from app.db.session_manager import Session

# Flask-SQLAlchemy 초기화
db = SQLAlchemy()
migrate = Migrate()

cache = Cache()


def create_app():
    """
    Flask 애플리케이션을 생성하고 설정하는 함수
    """
##########중략!!!!!!!!!!!!!!!!!

    from .routes import api

    # 기존 API 경로 유지 - Blueprint 등록
    app.register_blueprint(main)

    # Swagger 문서화 경로를 /docs로 분리 (add_specs=False로 기본 스펙 엔드포인트 등록 방지)
    api.init_app(app, add_specs=False)

    # Swagger 문서화 엔드포인트 추가
    @app.route('/docs')
    def swagger_ui():
        return api.render_doc()

    return app

이렇게.

그럼 이제 실행만 해보면 됨.


좀 오류가 발생했었는데 위에 등록했던 코드가 수정 완료한 코드임. 여튼

오오오

이런건 내가 코드 내에서 작성해줘야될듯.

그럼 기존 route가 너무 길어서 엔드포인트별로 리팩토링해서 저기 내용도 표시되게 수정해서 와야지.


리팩토링이랑 관련 안내 모두 작성하고옴..

오 됐음..

여튼 이거 배포는 나중에 해야겠다 리팩토링하면서 경로가 좀 바뀌었음.

경로가 바껴서 나중에 팀프로젝트 경로 수정하고 배포하고 확인해야될듯..