Framework/Flask

[Flask] Flask rest API 라이브러리 비교

깜태 2021. 5. 13. 18:30
728x90

TL:DR (요약)

flask-restful 라이브러리로 Flask-restful, flask-restplus, flask-restx 3가지 종류가 존재한다.

Flask-restful은 꾸준히 업데이트를 하고 있는 반면에,

restplus는 어느 시점에 업데이트가 끊겨서 restx가 restplus를 이어받아 업데이트하고 있다.

Swagger 쓸거면 restx, 상관없으면 restful 쓰자!

 

1. 업데이트, Star 비교

Flask-Restful

업데이트 기록
Flask-restful github

 

 

Flask-restful은 6K, 2021년에도 업데이트 지원중인 것을 볼 수 있다.

 

Flask-restplus

2.5K, 2019년 이후로 업데이트가 멈춘 것으로 보인다.

 

Flask-restX

1.1K, 홈페이지에 업데이트 기록은 없으나 깃허브를 보면 꾸준히 업데이트가 진행중으로 보인다 .

 

2. Swagger 지원

이 내용이 사실 이 글을 쓰게 된 이유이다. 

Swagger라는 REST API를 문서화해주는 도구가 있다.

Flask-restplus는 기본적으로 Swagger를 내장해 지원하는 반면에

Flask-restX는 restplus를 fork하여 만든 라이브러리로 restplus와 유사하다.

따라서 restX는 restplus를 이어받은 것으로 보면 될 것 같다.

https://flask-restx.readthedocs.io/en/latest/#

 

restx 홈페이지

반면에 Flask-restful는 추가적으로 라이브러리를 설치해야 지원이 가능한데,

이에 관한 이야기는 아래의 출처에서 좀 더 자세히 볼 수 있다.

 

https://livlikwav.github.io/flask/flask-auto-documentation/

 

Flask REST API 문서 자동화 하기, Flasgger

Swagger JSON과 UI를 지원하는 라이브러리인 Flasgger, 그리고 flask-apispec과 flask-restful-swagger 실패 기록까지

livlikwav.github.io

 

add_namespace(), add_resource() 차이

restplus, restful 둘다 사용해보았을 때, 큰 틀에서는 Resource, Api 와 같은 사용법 부분에서는 다른게 없다.

namespace는 Flask에서 blueprint와 동일한 기능으로, 보통 페이지를 분리하면서 편리하게 관리하기 위해 사용한다.

 

다양한 파일들이 존재하는 프로젝트 예시

추가로 Flask의 add_namespace의 장점으로는 분업화가 가능하다는 점인데, 

예를 들면 팀원 A에게는 namespace1.py, B에게는 namespace2.py 를 작업시킨 후 합치면
전체 프로젝트에서는 관리가 매우 수월하다.

 

위와 같이 분업해서 만든 API를 Swagger로 문서화하여 공유하는 경우도 생각해볼 수 있을텐데, 

restplus는 각 namespace 객체에서 param(), expect() 등을 지원하는데 Swagger를 통해 API문서화를 지원한다.

restplus는 add_namespace를 지원하므로 Swagger로도 지원이 가능해지기 때문에 이 부분이 제일 큰 차이로 보인다.

추가로 위의 이미지를 예를 들면 위와 같이 어떤 Resource를 두고, API의 response와 marshal, doc 등 다양한 기능을 수정할 수 있어서 자유도가 더 높아보인다.  

 

자세한 설명은 아래를 보면 이해할 수 있을 것 같다.

https://flask-restplus.readthedocs.io/en/stable/scaling.html

 

Scaling your project — Flask-RESTPlus 0.13.0 documentation

Scaling your project This page covers building a slightly more complex Flask-RESTPlus app that will cover out some best practices when setting up a real-world Flask-RESTPlus-based API. The Quick start section is great for getting started with your first Fl

flask-restplus.readthedocs.io

 

결론

구현을 놓고 보면 restplus와 restful은 차이가 없어보이지만,

Swagger를 내장해 지원하느냐에 따라 API 문서화에서 차이가 갈리기 때문에

개인의 상황에 따라 결정하면 좋을것 같다.

 

 

Swagger를 기준으로 썼지만 이외의 기능들에서 차이가 있으면 피드백 부탁드립니다.

추가로 구현에 관해선 아래의 링크를 참조하시면 많은 도움이 될 것 같습니다.

https://justkode.kr/python/flask-restapi-1

728x90