Blog JSystems - z miłości do programowania

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)

Przyjdź do nas na szkolenie z języka Python! Mamy szereg szkoleń w ofercie, od podstawowych po aplikacje webowe z użyciem Django, analizę danych, tesowanie, machine learning i wiele innych.
Sprawdź dostępne szkolenia Python
Zapisz się do newslettera aby otrzymywać najnowsze świeżynki pojawiające się na blogu!