Flask do REST API i przydatne pakiety

0

Cześć, kompletnie nie orientuje się w ekosytemie Pythona i nie wiem, z których pakietów warto korzystać w połączeniu z frameworkiem Flask, dlatego chciałbym prosić o pomoc w ich doborze. Wcześniej uczyłem się JavaScript (framework Express, mongoosejs) i nie ukrywam, iż szukam czegoś podobnego w Pythonie.

Pytania:

  1. Jaki wybrać pakiet do interakcji z MongoDB? Sprawdziłem Flask-PyMongo, ale działa inaczej niż mongoosejs. Potrzebowałbym coś w stylu mongoosejs tzn. aby można było określić schemat (dozwolone klucze dla dokumentu, reguły walidacji) i model do interakcji z bazą danych.

  2. Czy we Flasku jest coś w rodzaju Router z Express tzn. aby można było wydzielić endpointy do obiektu, nie robić tych globalnych funkcji i nie trzymać wszystkiego w jednym pliku?

  3. Jak obsługiwać błędy? Z tego co widzę to PyMongo ma jakieś metody w stylu find_one_or_404, warto z nich korzystać? Czy wewnątrz funkcji wsadzić blok try:except?

  4. Jakieś sugestie jak zorganizować strukturę projektu dla bardzo podstawowego API, które będzie zwracać dane z 2-3 kolekcji?

1

Nie lepiej zrobic to w Django Rest Frameworku ? Wszystko to o czym wspomniales jest w standardzie.

2

Zerknij na fastAPI

1
  1. mongoengine jest popularnym wyborem, istnieje z tego co widzę również i plugin pod Flaska. Ogółem jednak nie polecam pchania się w Mongo, bo to źródło bólu i cierpienia
  2. Aplikacje flaska strukturyzuje się przez dzielenie na tzw. blueprinty, każdy w osobnym pliku, zacznij lekturę od tego i tego. Co do globalnych funkcji, wolę podejście znane z tornado, gdzie każdy handler jest klasą z metodami get, post itd. zamiast globalnej funkcji z odpowiednim dekoratorem. We Flasku robi się to przy pomocy flask.views.MethodView
  3. Normalnie używasz wyjątków w handlerze jak w kazdym kodzie Pythona i jeżeli coś nie wyjdzie, to zgłaszasz flask.abort(). Tutaj jest wszystko opisane
  4. Zgodnie z tym, co napisano wyżej, główny plik rejestruje blueprinty, każdy blueprint opisuje jeden endpoint w osobnym pliku, definiując go jako klasę dziedzicząco po flask.views.MethodView Alternatywnie można obejrzeć inne rozszerzenie, flask-restful.
1

https://python-poetry.org/ - polecam do zarządza wersją pythona i zależnościami i środowiskiem developerskim.

https://github.com/zalando/connexion do budowania serwisów w oparciu o openapi flaska i pythona

1 użytkowników online, w tym zalogowanych: 0, gości: 1