최근 스웨거를 배웠음. 그래서 내 파이썬 프로젝트에 적용해서 경로 명세서를 제공하면 아주 좋겠다는 생각이들었음,
그래서 보니까 파이썬에는 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
가 너무 길어서 엔드포인트별로 리팩토링해서 저기 내용도 표시되게 수정해서 와야지.
리팩토링이랑 관련 안내 모두 작성하고옴..
오 됐음..
여튼 이거 배포는 나중에 해야겠다 리팩토링하면서 경로가 좀 바뀌었음.
경로가 바껴서 나중에 팀프로젝트 경로 수정하고 배포하고 확인해야될듯..
'Coding History > project' 카테고리의 다른 글
1차 개인프로젝트 발표. (중간 간담회) (8) | 2024.10.01 |
---|---|
지금까지의 기술스텍 및 기능정의서 (4) | 2024.09.26 |
회원가입 로그인 로직 중, 중복 이메일 처리. (1) | 2024.09.26 |
[IDE-인텔리제이] java.lang.ClassCastException 오류 해결. (0) | 2024.09.26 |
sample DB 다시 설계 (1) | 2024.09.26 |