회사에서 Flask_restx로 api server를 구축해봤는데 깔끔하고 잘 구축된 것 같아서, 문서로 정리해보려 한다.
먼저 디렉토리 구성은 아래와 같다.
api
- deploy
- extensions
- resources
- tests
- app.py
- models.py
- reqparse.py
- server.py
deploy dir
deploy 디렉토리는 k8s cluster에 api server를 띄우기 위한 yaml 파일들을 갖고 있다.
1. deployment.yaml
- Ingress
- Service
- Deployment
extensions
- __init__.py
- flask_cors 초기화
- flask_mongiengine 초기화
- flask_restx.Api 초기화
- base.py
- __init__.py에서 진행하는 초기화에 대한 코드들.
resources
flask_restx.Resource 클래스를 상속받아 API 구현
1. history.py
- flask_restx.Namespace를 통해 api path 설정
ns = flask_restx.Namespace('history', description='History')
- ns.model을 통해 스키마를 정의하고 ns.marshal_with을 ㅇ통해 정의된 스키마에 맞는지 확인하며, 출력을 swagger를 통해 문서화
- MongoDB에 있는 데이터에 대해서 처리를 진행.
test
- absltest class를 상속받아 MongoDB와 잘 연결되어 있는지 테스트코드 작성.
app.py
- flask app의 initialization을 담당
models.py
- mongoengine 라이브러리를 사용하여 mongoDB에 대해 application level schema를 설정하여 데이터 구조를 이해하기 쉽다.
- mongoengine.document.Document를 override해서 collection에 저장될 field들을 정의한다.
reqparse.py
- flask_restx.reqparse.RequestParser를 통해 API의 parameter들을 정의한다.
server.py
- mongodb와 연결하고 flask app을 실행하여 server에 띄우는 main 코드를 포함하고 있다.
- pywsgi.WSGIServer를 통해