Blog JSystems - uwalniamy wiedzę!

Szukaj
Framework Flask - proste usługi sieciowe

Usługi sieciowe zwracające dane

Usługi sieciowe są coraz częściej stosowane, zwłaszcza na fali popularności mikroserwisów. Flask idealnie się do tego nadaje, można szybko i prosto stworzyć lekką, a funkcjonalną aplikację. Można to samo osiągnąć z użyciem Django, ale próg wejścia jest nieco wyższy. Przykładowy kodzik:

100.png (384×412)

I efekt działania:

101.png (326×147)

Skrypt pod usługę sieciową niewiele się różni od takiego pod zwykłą stronę. Z nowych rzeczy - między liniami 5-9 pojawił się słownik z danymi. W linii 13 zamiast nazwy widoku i użycia funkcji „render_template”, bądź kodu html, zwracam po prostu dane.

Zamiast deklarować słownik, mogę się też posłużyć funkcją jsonify serializującą dane. Muszę ją jednak uprzednio zaimportować. Korzystając z niej mogę osiągnąć taki sam efekt, ale bez deklaracji słownika:

102.png (604×397)

Usługi sieciowe przyjmujące dane

Usługi sieciowe mogą nie tylko zwracać dane, ale również je przyjmować. Na początek wariant „minimum”:

110.png (447×244)

Różnice w stosunku do zwracania danych - linia 5 -argument „methods” tak jak w przypadku formularzy i na tej samej zasadzie, oraz w linii 7 tajemnicze „request.json”. To są po prostu przesłane do nas dane. Spróbujemy teraz wywołać naszą usługę sieciową z pomocą curl.

CURL nie jest natywną aplikacją dla systemu Windows, więc jeśli jej nie masz, musisz ją zainstalować i dodać do zmiennej środowiskowej „PATH”. Wywołanie naszej usługi sieciowej z przekazaniem danych, za pomocą CURL wygląda tak:

curl -i -H "Content-Type: application/json" -X POST -d "{\"status\":\"ok\"}" http://localhost/data.json

Teraz co tu jest co. Przełącznik „-i” służy temu by w odpowiedzi dostać nagłówek http. Znajdują się w nim takie rzeczy jak nazwa serwera, data utworzenia dokumentu etc. „-H” po nim następuje header który jest zawierany w żądaniu wysyłanym do usługi sieciowej.W naszym przypadku informujemy go, że otrzyma dane typu JSON (mógłby być choćby XML). Bez dodania tego usługa sieciowa ma „None” w miejscu spodziewanych danych.

„-X POST” to oczywiście nazwa użytej metody http, „-d” oznacza że po nim nastąpią dane do przesłania. Dane muszą być w formacie JSON. Tutaj użyłem też „\” mających za zadanie wyłączyć spośród znaków specjalnych znaj ‘ ” ‘, ponieważ na Windowsie pojedyncze „ ‘ „ nie działają poprawnie. Ostatni argument to adres na który wysyłam dane. Poniżej zrzut z konsoli:

111.png (602×70)

Konsola Python:

112.png (603×73)

Poprawnie odebraliśmy dane. Przez Pythona dane typu JSON są traktowane jako słowniki.

W tej chwili tylko odebraliśmy dane, w żaden sposób nie odpowiedzieliśmy na żądanie. Klient będzie oczekiwał na potwierdzenie poprawności odebrania danych, dlatego warto mu odesłać status 201 oznaczający właśnie to. Sprowadza się to do całkiem niedużej przeróbki funkcji obsługującej żądanie:

113.png (460×128)

Zwracane dane są odbierane przez klienta, można więc zwrócić np ID zapisywanego do bazy obiektu:

114.png (536×124)

Po stronie klienckiej odebrane dane wyglądają tak:

115.png (329×194)

Szkolenie Python od podstaw, przez analizę danych, do machine learning w JSystems

Ten kurs daje Ci solidne podstawy Pythona. Jeśli chcesz pójść dalej i pod okiem trenera dojść od pierwszej linijki kodu do własnego modelu uczenia maszynowego, sprawdź nasze pięciodniowe szkolenie Python od podstaw, przez analizę danych, do machine learning. Pierwsze trzy dni to Python w praktyce: typy i kolekcje, instrukcje warunkowe i pętle, funkcje, moduły i pakiety, pliki tekstowe, usługi sieciowe oraz praca z bazą PostgreSQL. Czwarty dzień to analiza danych w pandas (wczytywanie CSV, TSV i XLS, filtrowanie, agregacje, statystyki) i wizualizacja w Matplotlib, Seaborn oraz Plotly. Piąty dzień to uczenie maszynowe w scikit-learn: regresja liniowa i logistyczna, drzewa decyzyjne, las losowy, XGBoost, walidacja predykcji, dobór hiperparametrów i przeciwdziałanie przeuczeniu. Szkolenie ma terminy gwarantowane, czyli odbywa się niezależnie od wielkości grupy.

Szkolenie Python od podstaw, przez analizę danych, do machine learning

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Czy Flask nadaje się do budowy usług sieciowych?
Tak. Flask dobrze sprawdza się przy usługach sieciowych, zwłaszcza w podejściu mikroserwisowym, bo pozwala szybko zbudować lekką i funkcjonalną aplikację. To samo można osiągnąć w Django, ale próg wejścia jest tam wyższy.
Jak zwrócić dane z widoku zamiast strony HTML?
Zamiast wywoływać render_template albo zwracać kod HTML, po prostu zwracasz dane, na przykład słownik z wartościami. Możesz też użyć funkcji jsonify, która serializuje dane bez potrzeby ręcznego deklarowania słownika, ale trzeba ją wcześniej zaimportować.
Jak sprawić, żeby usługa sieciowa przyjmowała dane?
W dekoratorze trasy dodajesz argument methods, tak samo jak przy formularzach, żeby dopuścić metodę POST. Przesłane dane odczytasz przez request.json, przy czym Flask traktuje dane JSON jak słownik Pythona.
Dlaczego przy wywołaniu przez curl trzeba podać nagłówek Content-Type?
Nagłówek Content-Type informuje usługę, że wysyłasz dane typu JSON. Bez niego usługa sieciowa dostanie w miejscu spodziewanych danych wartość None, więc wywołanie nie zadziała poprawnie.
Jak potwierdzić klientowi poprawne odebranie danych?
Warto odesłać status HTTP 201, który oznacza, że dane zostały poprawnie utworzone i zapisane. Wymaga to niewielkiej przeróbki funkcji obsługującej żądanie, a w odpowiedzi możesz zwrócić na przykład identyfikator zapisanego do bazy obiektu.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...