Flask API

dddwsd·2022년 4월 24일
0

회사에서 Flask_restx로 api server를 구축해봤는데 깔끔하고 잘 구축된 것 같아서, 문서로 정리해보려 한다.

먼저 디렉토리 구성은 아래와 같다.

api

  • deploy
    • deployment.yaml
  • extensions
    • __init__.py
    • base.py
  • resources
    • hello.py
  • tests
    • models_test.py
  • app.py
  • models.py
  • reqparse.py
  • server.py

deploy dir

deploy 디렉토리는 k8s cluster에 api server를 띄우기 위한 yaml 파일들을 갖고 있다.
1. deployment.yaml

  • Ingress
    • host를 통해 domain을 설정
  • Service
    • port 설정
  • Deployment
    • container 설정

extensions

  1. __init__.py
  • flask_cors 초기화
  • flask_mongiengine 초기화
  • flask_restx.Api 초기화
  1. 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를 통해
profile
Github - https://github.com/dddwsd

0개의 댓글