Kolejny etap projektu za mną. Backend już działa, SQLAlchemy pięknie zarządza bazą danych (o tym pisałem ostatnio!), ale…
Pojawiło się kolejne wyzwanie.
API przyjmuje dane od użytkowników. Współrzędne GPS, nazwy, opisy…
I tu pojawia się pytanie – a co jeśli ktoś wyśle zupełnie losowe dane? Albo złośliwie spróbuje coś „wstrzyknąć”?
🎯 Wyzwanie
Głównym zadaniem było zabezpieczenie endpointów API przed nieprawidłowymi danymi wejściowymi.
Założenia były proste:
📌 Musi być bezpiecznie.
📌 Kod musi być czysty i czytelny (nie chciałem 50 linii if’ów w każdym endpoincie).
📌 Komunikaty błędów powinny być konkretne (żeby frontend wiedział, co jest nie tak).
🛣️ Droga
Pierwsze podejście? Walidacja ręczna. Sprawdzanie każdego pola osobno, if’y, sprawdzanie długości stringów, zakresów liczb…
Po napisaniu pierwszego endpointa wiedziałem, że musi być lepszy sposób 😂. Kod robił się nieczytelny, logika biznesowa mieszała się z walidacją, a ja zaczynałem się gubić.
Moje poszukiwania trwały dalej i tak oto… trafiłem na Marshmallow!
Nie… tym razem nie chodzi o słodkie pianki, ale był to strzał w 10!
Biblioteka ta pozwala zdefiniować SCHEMAT danych jako klasę Python.
Brzmi znajomo? Tak, podobnie jak SQLAlchemy dla bazy danych…
Zamiast pisać w każdym endpoincie dziesiątki linijek sprawdzających każde pole, definiuję raz schemat.
I to wszystko! Marshmallow automatycznie waliduje dane, a jeśli coś jest nie tak – zwraca konkretny komunikat błędu.
W praktyce oznacza to, że mój endpoint z 30 linijek kodu (20 z tego to były if’y) skurczył się do… prostego try-except i wywołania .load() na schemacie 💪.
Jeszcze lepsze?
Całą logikę walidacji przeniosłem do osobnego modułu validation_schemas.py. Endpointy są czyste, skupiają się na logice biznesowej, a walidacja żyje swoim życiem. Jak trzeba coś zmienić w regułach – wiem dokładnie gdzie szukać!
✅ Wynik
Po kilku wieczorach implementacji:
🎯 API jest bezpieczne – złe dane nie przejdą przez walidację.
🎯 Kod jest czysty i modułowy – logika walidacji całkowicie oddzielona od endpointów.
🎯 Komunikaty błędów są konkretne – frontend dokładnie wie, co poprawić.
🎯 Kilka różnych schematów – wszystko w jednym miejscu, łatwo zarządzać.
Co najważniejsze, zrozumiałem w praktyce, jak ważna jest walidacja danych wejściowych w API. To nie tylko kwestia „fajnie by było”, ale absolutny MUST dla bezpieczeństwa i stabilności aplikacji.
Marshmallow, podobnie jak SQLAlchemy, to kolejne narzędzie, które pokazuje mi, jak profesjonalne rozwiązania potrafią drastycznie podnieść jakość kodu. Nie trzeba wymyślać koła na nowo – branża już rozwiązała te problemy! 💪
Działam dalej! 😉
A Wy? Jak radzicie sobie z walidacją danych w waszych API? Marshmallow, a może coś innego?
Podzielcie się w komentarzach! 👇😉
