W świecie zarządzania danymi, połączenie potęgi Pythona i efektywności baz danych SQL tworzy silne narzędzie do obsługi danych. Integracja baz danych SQL z aplikacjami to kluczowa umiejętność dla każdego programisty, który chce budować solidne i skalowalne aplikacje internetowe. SQL jest standardowym językiem do zarządzania i manipulowania danymi w relacyjnych bazach danych. W połączeniu z FastAPI, otwiera przed nami szerokie możliwości przechowywania i pobierania danych. Kompatybilność FastAPI z bazami danych SQL realizowana jest poprzez ORM (Object-Relational Mapping), z których najpopularniejszym jest SQLAlchemy. W tym rozdziale skupimy się na tym narzędziu.
Aby rozpocząć, należy zainstalować FastAPI oraz SQLAlchemy w swoim środowisku wirtualnym. Jeśli podążałeś za instrukcjami z rozdziału 1, FastAPI powinno być już zainstalowane. Instalacja SQLAlchemy jest prosta i sprowadza się do jednego polecenia pip: $ pip install sqlalchemy. Po zainstalowaniu SQLAlchemy, kolejnym krokiem jest jego konfiguracja, aby mogło współpracować z FastAPI. Wymaga to ustawienia połączenia z bazą danych, co przeprowadzimy krok po kroku.
SQLAlchemy pełni rolę pomostu pomiędzy kodem Pythona a bazą danych, pozwalając na interakcję z bazą przy użyciu klas i obiektów Pythona, zamiast pisania zapytań SQL. Po zainstalowaniu SQLAlchemy, należy skonfigurować je w aplikacji FastAPI. Pierwszym krokiem jest zdefiniowanie modeli bazy danych, które będą reprezentować tabele bazy danych w kodzie Python. W SQLAlchemy modele definiowane są za pomocą klas, z których każda odpowiada jednej tabeli w bazie danych, a atrybuty klasy odpowiadają kolumnom tabeli.
Model użytkownika w SQLAlchemy może wyglądać następująco:
W tym modelu klasa User odpowiada tabeli o nazwie "user" w bazie danych, z kolumnami dla id, name i email. Każdy atrybut klasy określa typ danych kolumny.
Po zdefiniowaniu modeli, kolejnym krokiem jest połączenie z bazą danych i stworzenie odpowiednich tabel. SQLAlchemy używa łańcucha połączeń (connection string), aby określić szczegóły połączenia z bazą. Łańcuch ten będzie różnił się w zależności od używanego systemu baz danych. Dla bazy SQLite łańcuch połączenia wyglądałby na przykład tak: DATABASE_URL = "sqlite:///./test.db". SQLite to lekka, plikowa baza danych, która nie wymaga uruchomienia oddzielnego serwera, dlatego doskonale nadaje się do celów rozwojowych i testowych.
Dalszym krokiem jest utworzenie obiektu "Engine" w SQLAlchemy, który reprezentuje interfejs do bazy danych:
Po utworzeniu silnika, możemy przystąpić do tworzenia tabel w bazie. Można to zrobić, przekazując naszą klasę bazową oraz silnik do metody create_all SQLAlchemy:
Gdy struktura bazy danych jest już gotowa, pora na połączenie aplikacji z bazą danych. Połączenia z bazą danych w SQLAlchemy zarządzane są przez sesje. Sesja to przestrzeń robocza, w której możemy dodawać nowe rekordy lub pobierać istniejące. Każda sesja jest związana z jednym połączeniem do bazy danych. Aby zarządzać sesjami, musimy stworzyć klasę SessionLocal, która będzie służyła do tworzenia i zarządzania obiektami sesji:
Funkcja sessionmaker tworzy fabrykę sesji. Parametry autocommit i autoflush są ustawione na False, co oznacza, że transakcje muszą być ręcznie zatwierdzane, a zmiany zapisane w bazie muszą być zarządzane przez programistę.
Gdy mamy już klasę SessionLocal, możemy stworzyć funkcję, która będzie używana w funkcjach routujących FastAPI do uzyskiwania nowych sesji bazy danych. Funkcję tę możemy dodać do modułu main.py w następujący sposób:
W swoich funkcjach routujących możemy używać tej funkcji jako zależności do komunikacji z bazą danych. W FastAPI można to zrobić przy użyciu klasy Depends. Na przykład, możemy dodać punkt końcowy do odczytu użytkowników:
Takie podejście zapewnia, że dla każdego żądania zostanie utworzona nowa sesja, która zostanie zamknięta po zakończeniu żądania. To kluczowe dla utrzymania integralności transakcji w bazie danych.
Warto również pamiętać, że podczas pracy z bazą danych w aplikacji FastAPI należy zadbać o odpowiednie zabezpieczenia, aby uniknąć takich problemów jak SQL Injection. SQLAlchemy oferuje mechanizmy ochrony przed tymi zagrożeniami poprzez wykorzystanie zapytań parametryzowanych.
Jak zaimplementować zadania tła w FastAPI?
FastAPI, jako jedno z najpopularniejszych narzędzi do budowy aplikacji internetowych w Pythonie, oferuje wiele zaawansowanych funkcji, które umożliwiają łatwe i efektywne zarządzanie asynchronicznymi zadaniami. Jedną z takich funkcji jest obsługa zadań w tle, które pozwalają na wykonywanie operacji wymagających czasu, takich jak zapisywanie danych do bazy, bez blokowania głównego procesu aplikacji. Dzięki temu aplikacja może reagować na żądania użytkowników szybciej, a jednocześnie wykonywać długotrwałe operacje w tle.
Załóżmy, że chcielibyśmy przechować komunikaty z punktu końcowego GET /v2/trips/{category} w zewnętrznej bazie danych w celach analitycznych. Zrealizujemy to w dwóch krokach.
Po pierwsze, zdefiniujemy funkcję, która będzie symulować operację przechowywania danych w zewnętrznej bazie. Funkcja ta znajduje się w dedykowanym module background_tasks.py, który będzie przechowywał logikę operacji w tle:
Zadanie jest tutaj symulowane przez operację asyncio.sleep, co pozwala na wykonanie nieblokującej operacji. W kodzie dodano również logowanie, aby śledzić postęp wykonania zadania.
Drugim krokiem jest dodanie tego zadania w tle do endpointu aplikacji. Modyfikujemy nasz punkt końcowy GET /v2/trips/{category} w pliku main.py w następujący sposób:
W powyższym przykładzie, po otrzymaniu żądania, zadanie przechowywania danych w tle zostaje dodane do obiektu background_tasks, a cała operacja odbywa się w tle, nie blokując głównego procesu. Po zakończeniu operacji, system loguje wynik wykonania zadania.
Aby uruchomić aplikację, wystarczy skorzystać z komendy:
Teraz, przy wywołaniu endpointu GET /v2/trips/cruises, zobaczymy w terminalu logi z funkcji store_query_to_external_db, które będą wyglądać następująco:
Implementacja zadań w tle w FastAPI jest więc bardzo prosta. Niemniej jednak, jeśli musimy wykonać bardziej zaawansowane operacje obliczeniowe, warto rozważyć wykorzystanie dedykowanych narzędzi do zarządzania kolejkami zadań, takich jak Celery. Dzięki tym narzędziom możemy wykonywać zadania w oddzielnym procesie, co pozwala uniknąć problemów z wydajnością, które mogą wystąpić, gdy zadania będą wykonywane w tym samym procesie co aplikacja FastAPI.
Jak działa system zadań w tle? Kiedy żądanie trafia do endpointu, zadanie w tle jest dodawane do obiektu BackgroundTasks, który przekazuje je do pętli zdarzeń (event loop) w celu równoczesnego wykonania. Dzięki temu operacje I/O, takie jak zapisywanie danych do bazy czy wysyłanie zapytań HTTP, mogą być wykonywane równolegle, bez blokowania głównego procesu.
Warto jednak pamiętać, że takie podejście nie jest odpowiednie dla bardziej złożonych operacji, które wymagają dużej mocy obliczeniowej. W takich przypadkach, zamiast używać zadań w tle w FastAPI, warto rozważyć wykorzystanie narzędzi takich jak Celery, które oferują bardziej zaawansowane funkcje zarządzania zadaniami i ich kolejkowaniem. Pozwoli to na wykonywanie długotrwałych obliczeń w oddzielnych procesach i uniknięcie problemów związanych z przeciążeniem głównego procesu aplikacji.
Istnieją także narzędzia i biblioteki, które pozwalają na bardziej efektywne zarządzanie zadaniami w tle, takie jak RQ (Redis Queue) czy Dramatiq. Każde z nich oferuje różne podejścia do obsługi zadań asynchronicznych, które mogą lepiej odpowiadać potrzebom twojej aplikacji, szczególnie gdy wymagane jest bardziej złożone i rozbudowane zarządzanie zadaniami.
Warto również pamiętać, że FastAPI udostępnia bardzo wygodny mechanizm obsługi zależności (dependency injection), który umożliwia łatwe zarządzanie komponentami aplikacji, w tym zadaniami w tle. Dzięki temu możemy w sposób modularny i elastyczny włączać zadania w tle do różnych części aplikacji, co znacznie poprawia organizację kodu i ułatwia jego utrzymanie.
Jak przygotować środowisko deweloperskie do pracy z FastAPI: Kluczowe kroki i narzędzia
Aby rozpocząć przygodę z FastAPI, należy zadbać o odpowiednie środowisko deweloperskie, które będzie wspierać zarówno język Python, jak i funkcjonalności FastAPI. Jest to niezbędna baza, dzięki której będziesz w stanie tworzyć profesjonalne aplikacje webowe. W poniższym rozdziale przedstawiamy szczegółowy proces instalacji i konfiguracji narzędzi, które pozwolą na sprawne rozpoczęcie pracy z FastAPI. Proces ten obejmuje instalację Python, FastAPI, serwera Uvicorn, a także konfigurację środowiska IDE i GitHub, co umożliwi wygodne zarządzanie kodem oraz współpracę z innymi programistami.
Instalacja niezbędnych narzędzi
Pierwszym krokiem w przygotowaniu środowiska jest zainstalowanie Pythona, który stanowi fundament dla FastAPI. Jeśli jeszcze go nie posiadasz, możesz pobrać najnowszą wersję ze strony python.org. Pamiętaj, aby sprawdzić, czy wersja jest kompatybilna z wersją FastAPI, którą zamierzasz zainstalować. Zainstalowanie odpowiedniej wersji jest kluczowe, ponieważ FastAPI wymaga Pythona w wersji co najmniej 3.6.
Po zainstalowaniu Pythona, następnym krokiem jest instalacja FastAPI i Uvicorn. Uvicorn to serwer ASGI, który jest odpowiedzialny za uruchamianie aplikacji FastAPI. W celu jego zainstalowania oraz samego FastAPI, wystarczy wykonać w terminalu poniższe polecenie:
Komenda ta zainstaluje FastAPI wraz ze wszystkimi rekomendowanymi zależnościami, w tym Uvicorn. Po zakończeniu instalacji, możesz sprawdzić, czy wszystko działa poprawnie, uruchamiając komendę:
Wybór środowiska IDE
Kolejnym krokiem jest konfiguracja środowiska IDE. Odpowiednie środowisko do pisania i debugowania kodu może znacząco wpłynąć na jakość pracy oraz efektywność. Do pracy z FastAPI i Pythonem często wykorzystywane są dwa popularne IDE: Visual Studio Code (VS Code) oraz PyCharm. Oba narzędzia oferują bogate wsparcie dla Pythona oraz ułatwiają pracę z frameworkiem FastAPI.
Visual Studio Code (VS Code)
VS Code to lekkie, otwartoźródłowe środowisko, które charakteryzuje się ogromną elastycznością. Można je dostosować do swoich potrzeb za pomocą rozszerzeń. Aby rozpocząć pracę, należy pobrać i zainstalować VS Code z oficjalnej strony. Następnie, w celu zainstalowania wsparcia dla Pythona, wystarczy przejść do sekcji Extensions i wyszukać rozszerzenie Python autorstwa Microsoftu. Po zainstalowaniu go, IDE będzie gotowe do pracy.
PyCharm
PyCharm to potężne IDE stworzone specjalnie z myślą o programistach Pythona. Jest dostępne w dwóch wersjach: Community Edition, która jest darmowa, oraz Professional Edition, która oferuje dodatkowe funkcje, ale jest płatna. W kontekście pracy z FastAPI wystarczająca będzie wersja Community, którą można pobrać ze strony JetBrains. Po zainstalowaniu PyCharm, IDE oferuje szereg narzędzi, które wspierają pracę z frameworkiem FastAPI, takich jak integracja z systemami wersjonowania, debuggowanie kodu, czy podpowiedzi kodu.
Integracja z Git i GitHub
Podstawą współczesnego rozwoju oprogramowania jest korzystanie z systemu kontroli wersji. Git jest jednym z najpopularniejszych narzędzi tego typu, a GitHub stanowi świetne rozwiązanie do przechowywania kodu i współpracy z innymi deweloperami. Należy zatem zainstalować Git, jeśli jeszcze tego nie zrobiłeś. Po instalacji Git, warto również założyć konto na GitHubie, aby móc łatwo zarządzać swoimi projektami oraz współpracować z innymi.
Aby zainstalować Git, wystarczy pobrać go ze strony git-scm.com i zainstalować na swoim komputerze. Po zakończeniu instalacji należy skonfigurować swoje dane użytkownika, wykonując polecenia:
Testowanie aplikacji przy pomocy Postman i Swagger UI
Testowanie API jest nieodzownym elementem procesu tworzenia aplikacji webowych. FastAPI automatycznie generuje interfejs Swagger UI, który pozwala na łatwe testowanie endpointów aplikacji. Swagger UI dostępny jest pod adresem /docs po uruchomieniu aplikacji. Możesz tam testować wszystkie dostępne endpointy i sprawdzać ich działanie na żywo.
Alternatywnie, do testowania możesz użyć Postmana — popularnego narzędzia do testowania API, które oferuje szeroki wachlarz funkcji, takich jak testowanie zapytań HTTP, monitorowanie odpowiedzi oraz automatyzowanie procesów testowych.
Utrzymywanie porządku w projekcie
Po skonfigurowaniu wszystkich niezbędnych narzędzi, kolejnym krokiem jest utrzymanie porządku w projekcie. Istotne jest, aby używać Git do kontrolowania wersji swojego kodu i regularnie commitować zmiany. Dzięki temu nie tylko zabezpieczysz się przed utratą danych, ale również ułatwisz sobie współpracę z innymi programistami. Pamiętaj, aby na bieżąco przeglądać dokumentację FastAPI, ponieważ framework ten jest dynamicznie rozwijany, a jego możliwości ciągle się rozszerzają.
Ważne wskazówki
Pamiętaj, że szybka instalacja narzędzi to tylko początek. Ostateczny sukces w pracy z FastAPI zależy od umiejętności korzystania z tych narzędzi w sposób efektywny. Dlatego warto poświęcić czas na naukę debugowania w swoim IDE, optymalizowania procesów w Git oraz wykorzystywania dostępnych narzędzi do testowania i monitorowania aplikacji. Dbanie o jakość kodu, stosowanie dobrych praktyk oraz korzystanie z zaawansowanych funkcji IDE pomoże Ci w codziennej pracy nad aplikacjami FastAPI.
Jak wdrożyć aplikację FastAPI przy użyciu Railway i Hatch
Aby rozpocząć proces wdrażania aplikacji FastAPI, należy kliknąć ikonę wdrożenia, co otworzy okno po lewej stronie. Następnie przechodzimy do zakładki „Settings” (Ustawienia), gdzie wyświetlona zostanie lista konfiguracji, podzielona na sekcje takie jak: Source (Źródło), Networking (Sieć), Build (Budowanie) i Deploy (Wdrażanie). Zaczniemy od sekcji Source.
Jeśli projekt pochodzi z repozytorium FastAPI-Cookbook, lub jeśli katalog główny Twojego projektu nie jest katalogiem głównym repozytorium, kliknij opcję „Add Root Directory” (Dodaj katalog główny) i wprowadź ścieżkę. Dla repozytorium FastAPI-Cookbook ścieżka będzie wynosić /Chapter12/live_application. Po dodaniu ścieżki kliknij ikonę zapisu. Zostaw wybraną gałąź jako „main”.
Przechodzimy teraz do sekcji Networking. Kliknij przycisk „Generate Domain” (Generuj domenę) w podsekcji Public Network. Spowoduje to wygenerowanie unikalnej domeny do udostępniania aplikacji. Moja domena to fastapi-cookbook-production.up.railway.app, Twoja będzie nieco inna. Pozostaw pozostałe ustawienia bez zmian. Na górze po lewej stronie ekranu pojawi się pasek tekstowy z napisem „Apply 2 changes with a Deploy button”. Kliknij ten przycisk, aby zastosować wprowadzone zmiany. Po zakończeniu procesu wdrożenia Twoja aplikacja będzie gotowa do obsługi ruchu webowego. Publiczny adres aplikacji będzie określony w sekcji Networking panelu ustawień. Otwórz ten adres w nowej karcie przeglądarki i sprawdź odpowiedź. Powinieneś zobaczyć odpowiedź: {"Hello": "World"}.
W pasku adresu przeglądarki pojawi się ikona kłódki, co wskazuje, że połączenie jest bezpieczne i posiada certyfikat. Zwykle, gdy udostępniasz swoją usługę w internecie, platforma hostingowa automatycznie dostarcza certyfikaty. Dzięki temu właśnie wdrożyłeś swoją aplikację FastAPI, która jest teraz dostępna w Internecie i może być wykorzystywana przez użytkowników na całym świecie.
Warto dodać, że Railway, aby wdrożyć usługę, tworzy obraz, a następnie kontener, w którym uruchamia aplikację. Możesz również określić niestandardowy obraz za pomocą Dockerfile, który będzie automatycznie wykryty. Jeśli chcesz zgłębić temat Railway i poznać więcej na temat tej platformy, warto zajrzeć do oficjalnej dokumentacji Railway (https://docs.railway.app/) oraz zapoznać się z przykładem FastAPI na Railway (https://github.com/railwayapp-templates/fastapi).
FastAPI jest jednym z najszybciej rozwijających się narzędzi do budowania aplikacji produkcyjnych, szczególnie w czołowych platformach chmurowych. Dlatego znajdziesz obszerne materiały na temat jego użycia, w tym artykuły o wdrażaniu aplikacji FastAPI na takich platformach jak Google Cloud Platform (GCP), Amazon Web Services (AWS) i Microsoft Azure. Przykłady na te tematy dostępne są pod poniższymi linkami:
-
„Deploying FastAPI app with Google Cloud Run” (https://dev.to/0xnari/deploying-fastapi-app-with-google-cloud-run-13f3)
-
„Deploy FastAPI on AWS EC2” (https://medium.com/@shreyash966977/deploy-fastapi-on-aws-ec2-quick-and-easy-steps-954d4a1e4742)
-
„Using FastAPI Framework with Azure Functions” (https://learn.microsoft.com/en-us/samples/azure-samples/fastapi-on-azure-functions/fastapi-on-azure-functions/)
Dodatkowo, warto zapoznać się z platformą Porter, która umożliwia wdrażanie aplikacji na różnych usługach chmurowych, takich jak AWS, GCP czy Azure, z jednego zintegrowanego miejsca. Można to zrobić za pomocą dokumentacji dostępnej pod tym linkiem: (https://docs.porter.run/guides/fastapi/deploy-fastapi).
Kiedy aplikacja FastAPI jest już gotowa, kluczowym krokiem jest jej zapakowanie i wysłanie na zewnątrz. W tym celu dobrze jest używać narzędzi do zarządzania projektami Pythonowymi, takich jak Hatch, które upraszczają proces tworzenia paczek, wersjonowania i dystrybucji aplikacji. Hatch umożliwia łatwą obsługę wielu środowisk wirtualnych, a także integruje się z systemem pakietów w Pythonie, co sprawia, że aplikacja jest łatwa do zainstalowania i utrzymywania.
Aby zbudować i wdrożyć aplikację przy użyciu Hatch, należy wykonać kilka kroków:
-
Zainicjowanie projektu.
-
Instalacja zależności.
-
Utworzenie aplikacji.
-
Zbudowanie dystrybucji.
-
Testowanie paczki.
Rozpoczynamy od utworzenia projektu. Można to zrobić za pomocą komendy hatch new "FCA Server", która utworzy strukturę projektu pod folderem fca-server. Następnie wchodzimy do katalogu projektu, uruchamiamy środowisko wirtualne komendą hatch shell i sprawdzamy, czy środowisko zostało poprawnie aktywowane. Aby zainstalować wymagane zależności, dodajemy pakiet FastAPI do pliku pyproject.toml, w sekcji zależności.
Po zainstalowaniu FastAPI możemy przejść do tworzenia samej aplikacji. W głównym module aplikacji, np. main.py, inicjujemy obiekt APIRouter i definiujemy jeden punkt końcowy, który zwróci podstawową odpowiedź „Hello, World”. Gdy aplikacja jest gotowa, tworzymy jej paczkę, którą będziemy mogli przetestować i udostępnić.
Warto pamiętać, że proces budowy i wdrażania aplikacji FastAPI jest nie tylko związany z jej uruchomieniem w środowisku chmurowym, ale także z odpowiednim przygotowaniem aplikacji do pracy w różnych środowiskach i platformach. Im lepiej przygotujesz aplikację, tym łatwiej będzie ją zarządzać i skalować w przyszłości.
Hoe kun je gemakkelijk communiceren in Duitse hotels en tijdens het reizen?
Hoe kun je het meeste uit je ondersteunende Brawlers halen?
Hoe kan je effectief communiceren in winkels en markten in Japan?
Hoe een Bedtijdroutine te Creëren die Je Slapencyclus en Kwaliteit van Slaap Verbeteren
Hoe beïnvloeden bijvoeglijke naamwoorden in het Spaans het geslacht en het meervoud?
Hoe belangrijk is het begrijpen van licenties en aansprakelijkheidsbeperkingen bij het gebruik van technische literatuur?
Wat is de invloed van zelfwaardering op persoonlijkheid en politiek gedrag?
Hoeveel kost een tocht op de Nijl?
Hoe kun je met eenvoudige ingrediënten gezonde, smaakvolle en voedzame maaltijden bereiden?
Wat zijn Somatische Oefeningen en Hoe Kunnen Ze Je Leven Verbeteren?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский