O. Marszałek, WebSerwisy w Django

Transkrypt

O. Marszałek, WebSerwisy w Django
WebSerwisy w Django
Oskar Marszałek
Wydział Inżynierii Mechanicznej i Informatyki
Kierunek Informatyka, Rok III
[email protected]
Streszczenie
Celem pracy jest zaprezentowanie technologii Web Service na przykładzie aplikacji stworzonej w webowym framework’u Django opartym o j˛ezyk Python. Niniejsza praca ma podkreślić uniwersalność architektury REST, przydatność technologii
Web Service oraz prostot˛e ich tworzenia w Django.
1
1.1
Wst˛ep
Definicja Web Service[1]
Realizowana programistycznie usługa świadczona poprzez sieć telekomunikacyjna,˛ a w
tym sieć komputerowa,˛ w szczególności przez Internet.
Usługa internetowa jest w istocie składnikiem oprogramowania, niezależnym od platformy sprz˛etowej oraz implementacji, dostarczajacym
˛
określonej funkcjonalności. Zgodnie z zaleceniami W3C, dane przekazywane sa˛ zazwyczaj za pomoca˛ protokołu HTTP i
z wykorzystaniem XML.
1.2
Definicja Representational State Transfer (REST)[2]
Wzorzec architektury oprogramowania wywiedziony z doświadczeń przy pisaniu specyfikacji protokołu HTTP. REST jest
wzorcem architektury oprogramowania wprowadzajacym
˛
dobre
praktyki tworzenia architektury
aplikacji rozproszonych.
REST wprowadza terminy takie jak jednorodny interfejs, bezstanowa komunikacja, zasób, reprezentacja.
Architektur˛e REST można
podzielić na 2 zagadnienia (Rys.
1). Rzeczowników, czyli inaczej
Rys. 1: Uproszczony schemat architektury REST
1
mówiac
˛ zasobów, do których mamy dost˛ep oraz czasowników, które sa˛ uniwersalne. Mam
tu na myśli takie metody jak GET, POST, PUT, DELETE itd. Każdy zasób możemy w
końcu pobrać, edytować, dodać go lub usunać.
˛
1.3
Definicja Django[3]
Wysokopoziomowy, opensource’owy framework przeznaczony do tworzenia aplikacji internetowych, napisany w Pythonie. Powstał pod koniec 2003 roku jako ewolucyjne rozwini˛ecie aplikacji internetowych, tworzonych przez grup˛e programistów zwiazanych
˛
z
Lawrence Journal-World. W 2005 roku kod Django został wydany na licencji BSD. Nazwa frameworku pochodzi od imienia gitarzysty Django Reinhardta.
Django opiera si˛e na wzorcu projektowym podobnym do MVC nazywanym MVT
(Model-View-Template).
2
Dlaczego WebSerwisy ?
WebSerwisy dostarczaja˛ możliwość współdziałania aplikacji napisanych w różnych j˛ezykach i działajacych
˛
na wszelakich platformach. Używaja˛ otwartych standardów i protokołów bazujacych
˛
na tekście czytelnym dla człowieka. Kanałem transportowym jest
protokół HTTP, co rozwiazuje
˛
problem obecności firewalla w sieci. Dzi˛eki WebSerwisom wiele instytucji i firm może współdzielić mi˛edzy soba˛ zasoby. Główna˛ zaleta,˛ dla
której warto użyć technologii Web Service jest możliwość podziału projektu na moduły
co umożliwia późniejszy rozwój aplikacji[8].
3
Dlaczego Django i REST ?
W dzisiejszych czasach ważna˛ kwestia˛ w tworzeniu oprogramowania jest niewatpliwie
˛
czas. Django pozwala na bardzo szybkie stworzenie projektu, rozwini˛eciu go oraz wdrożenie nowych pracowników w zagadnienia danego tematu w bardzo krótkim czasie. Za architektura˛ REST przemawia wiele pozytywnych cech. WebSerwisy napisane w oparciu o
REST dostarczaja˛ dobra˛ infrastruktur˛e cache’owania przez metod˛e GET protokołu HTTP.
To zwi˛eksza wydajność jeśli dane zwrócone przez WebSerwis nie sa˛ dynamiczne i cz˛esto
zmieniane. Znajduje swoje zastosowanie w urzadzeiach
˛
mobilnych tj. smartphone’y przy
sprawnym dostarczaniu zasobów aplikacjom. Przede wszystkim sa˛ łatwo integrowane z
istni˛ejacymi
˛
już stronami internetowymi. Nie ma potrzeby zmian w kodzie strony. Dzi˛eki
temu developerzy sa˛ bardziej produktywni i nie musza˛ tworzyć wszystkiego od nowa, po
prostu dodaja˛ istniejac
˛ a˛ już funkcjonalność[9].
4
4.1
Wykorzystanie Django do stworzenia przykładowej aplikacji używajacej
˛ technologi˛e Web Service
Aplikacja
Stworzona przeze mnie aplikacja przyjmuje dane z różnych źródeł. W tym wypadku b˛edzie to spis nauczycieli Politechniki Cz˛estochowskiej, pobrany w postaci pliku html ze
2
strony http://www.wimii.pcz.pl . Składa si˛e z dwóch modułów: źródła, gdzie dopisuje si˛e
funkcjonalność w oparciu o kolejne źródła danych oraz wyjścia, który pozwala te dane
edytować i je zaprezentować.
4.1.1
Wykorzystane moduły
urllib2
Moduł j˛ezyka Python do pobierania zasobów z sieci za pośrednictwem URL’i[7].
BeautifulSoup
Biblioteka j˛ezyka Python do wyciagania
˛
danych ze stron HTML i plików XML. Udost˛epnia świetny sposób nawigowania, szukania oraz modyfikowania drzewa parsowania.
Oszcz˛edza programiście wiele godzin pracy[6].
TastyPie
Aplikacja do wystawiania RESTowego API dla naszych aplikacji Django. Za pomoca˛
TastyPie w łatwy sposób możemy udost˛epnić dane zapisane w wybranym modelu. API
może być konfigurowane - np. wzbogacone o autoryzacj˛e, czy filtrowanie danych i dost˛epne metody jakie użytkownicy API moga˛ wykonać[4].
4.2
Tworzenie modeli
Model w Django służy do definiowania struktury i relacji tabel w bazie danych. Każdy model jest klasa˛ Pythona dziedziczac
˛ a˛ django.db.models.Model. Każda właściwość
klasy-modelu określa pole w bazie danych. Dane niezwiazane
˛
z polami w bazie danych
umieszczane sa˛ w wewn˛etrznej klasie "Meta". W django progmista nie posługuje si˛e zapytaniami znanymi z j˛ezyka SQL. Operacje na bazach danych sa˛ przeprowadzane przez
ORM Django. Pracujac
˛ na obiektach, pracuje si˛e tak na prawd˛e na rekordach bazy danych. Modele dla tej aplikacji znajduja˛ si˛e odpowiednio w plikach input/models.py oraz
output/models.py.
4.2.1
Model Pliku
Model File odpowiada za wpis w bazie danych odnoszacy
˛ si˛e do każdego nowo pobranego
pliku do folderu ’latest’ lub też jego zarchiwizowanej wersji przeniesionej automatycznie
do katalogu ’archive’. Posiada nazw˛e, dowiazanie
˛
do samego pliku oraz czas jego pobrania.
4.2.2
Model obiektu nauczyciela
Model Teacher dotyczy obiektu nauczyciela, który powstanie ze sparsowanej z pliku html
listy pracowników. Posiada pola takie jak imi˛e, nazwisko, stopień oraz wydział, na którym
pracuje.
3
4.3
Mapowanie URL
Wszystkie aplikacje internetowe, m. in. WebSerwisy udost˛epniaja˛ jakieś zasoby. Aby si˛e
do nich dostać, trzeba odwołać si˛e do konretnego adresu URL. Django umożliwia bardzo
prosta˛ i wygodna˛ konfiguracj˛e dost˛epu do danych. W pliku urls.py projektu znajduje si˛e
lista, która mapuje konkretne URL’e do widoków dzi˛eki zastosowaniu wyrażeń regularnych. Na przykład poprzez http://localhost:8000/download-teachers zgłasza si˛e
żadanie
˛
uaktywniajac
˛ tym samym widok ’download_teachers’, co umożliwi pobranie pliku HTML z ustalonego wcześniej źródła. Odwołujac
˛ si˛e do url’a http://localhost:
8000/parse-teachers, widok odpowiadajacy
˛ za parsowanie pliku HTML dostanie ża˛
danie, obrobi dane tworzac
˛ poszczególne obiekty i zwróci odpowiedź. Można również
przez url przekazać dodatkowe argumenty takie jak identyfikator wpisu czy dat˛e jego dodania.
4.4
Tworzenie widoków
Widoki w Django pełnia˛ funkcj˛e kontrolera, to one sprawiaja,˛ że aplikacja działa tak,
a nie inaczej. Zapewniaja˛ dana˛ funkcjonalność, pozwalaja˛ na przerabianie danych w zamierzony sposób. Decyduja˛ o tym jak informacj˛e b˛eda˛ reprezentowane. Główne widoki w
prezentowanej aplikacji odpowiadaja˛ za pobranie, archiwizacj˛e plików źródłowych oraz
parsowanie i tworzenie listy obiektów nauczycieli i sa˛ umieszczone w pliku views.py w
katalogu odpowiadajacemu
˛
danemu modułowi.
4.4.1
Pobranie oraz archiwizacja plików
Plik HTML zawiera list˛e obecnie
pracujacych
˛
nauczycieli Politechniki Cz˛estochowskiej i jest pobierany dzi˛eki adresowi URL podanemu na wejście modułu urllib2. Z czasem plik jest nadpisywany przez nowy, np. okresowo co semestr dzi˛eki modułowi
Django Celery, a stara wersja zostaje automatycznie przeniesiona
do folderu archive. Adres URL
do pliku może być podany np.
przez formularz na stronie zarza˛
dzajacej
˛ WebSerwisem.
4.4.2
Stworzenie obiektów
Rys. 2: Panel administracyjny
Gdy plik jest już pobrany, można go sparsować i wyciagn
˛ ać
˛ poszczególne dane za pomoca˛ modułu BeautifulSoup. Uzyskujac
˛ poszczególne dane z pliku, tworzy si˛e lista obiektów (nauczycieli), które zostana˛ zapisane w bazie danych (Rys. 2).
4
4.5
4.5.1
Wykorzystanie TastyPie w aplikacji
Instalacja TastyPie
Instalacja jest prosta i przyjemna. Wystarczy użyć PIP’a, narz˛edzia do instalacji paczek
Python’a (Listing 1).
Listing 1: Instalacja TastyPie
p i p i n s t a l l d j a n g o −t a s t y p i e
4.5.2
Konfiguracja API
Aby ukończyć WebSerwis i udost˛epnić API dla zbioru nauczycieli, należy najpierw dodać
wpis w pliku urls.py (Listing 2).
Listing 2: Dodanie url’a dla API
from l i s t a . a p i import T e a c h e r R e s o u r c e
tea cher _res ourc e = TeacherResource ( )
u r l p a t t e r n s += p a t t e r n s ( ’ ’ ,
url ( r ’^ api / ’ , include ( teacher_resource . urls )) ,
)
Nast˛epnie utworzyć w pliku api.py klas˛e dziedziczaca
˛ po klasie ModelResource z odpowiednim QuerySet’em, czyli żadaniem
˛
o konkretny zasób danych (Listing 3).
from
from
from
from
Listing 3: Implementacja kodu API TastyPie
t a s t y p i e . r e s o u r c e s import M o d e l R e s o u r c e
t a s t y p i e import r e s o u r c e s
t a s t y p i e . c o n s t a n t s import ALL
i n p u t . m o d e l s import T e a c h e r
c l a s s T e a c h e r R e s o u r c e ( MyModelResource ) :
c l a s s Meta :
queryset = Teacher . o b j e c t s . a l l ( )
resource_name = ’ t e a c h e r ’
f i e l d s = [ ’ name ’ , ’ s u r n a m e ’ , ’ d e g r e e ’ , ’ f a c u l t y ’ ]
excludes = [ ’ id ’ ]
i n c l u d e _ r e s o u r c e _ u r i = True
l i m i t = 250
filtering = \
{ " name " : ALL , " s u r n a m e " : ALL , \
" d e g r e e " : ALL , " f a c u l t y " : ALL}
5
4.5.3
Prezentacja API
Rys. 3: Wyświetlone zasoby oraz konfiguracja API
Każdy ma różne potrzeby,
dlatego TastyPie posiada wiele
możliwości, dzi˛eki którym można rozwinać
˛ projekt. Dane można
filtrować przez dodanie w URL’u
tag’ów zgodnych z filtrowaniem
QuerySet’ów w Django (Rys. 4).
T˛e oraz inne opcje tj. dost˛epne
metody, format danych czy autoryzacj˛e można skonfigurować w
klasie TeacherResource. Właśnie
tak niewiele trzeba by udost˛epnić
RESTowa˛ aplikacj˛e w sieci.
Rys. 4: Panel administracyjny
6
5
Podsumowanie
W pracy przedstawiono zastosowanie WebSerwisu na przykładzie aplikacji stworzonej w
webowym framework’u Django opartym o j˛ezyk programowania Python. Dzi˛eki prostocie j˛ezyka i jego tzw. "batteries included", czyli wbudowanym możliwościom, można w
bardzo łatwy i szybki sposób stworzyć WebSerwis, który spełni najsurowsze wymagania.
Dzi˛eki API zapewnionemu przez moduł TastyPie otrzymuje si˛e uniwersalna˛ i niezależna˛ od architektury reprezentacj˛e danych, które moga˛ posłużyć do wielu rozmaitych
celów, najcz˛eściej jako źródło danych dla innego systemu. Moduł ten pozwala na konfiguracj˛e API wedle uznania i we wzorcowy sposób przedstawia działanie aplikacji stworzonej w oparciu o architektur˛e REST. Majac
˛ dost˛ep do metod protokołu HTTP tj. GET,
POST, PUT, PATCH czy DELETE można w pełni ingerować w zasoby poprzez adres
URL. Dost˛ep do nich można uzyskać z każdej przegladarki
˛
internetowej badź
˛ sieciowej
biblioteki programistycznej, cURL. Format danych jest zależny tylko i wyłacznie
˛
od tagu
format w zapytaniu. Mamy do dyspozycji JSON, XML, YAML czy bplist.
Django udost˛epnia gotowy panel administracyjny, dzi˛eki któremu również można zarzadzać
˛
zasobami. Pozwala na dołaczanie
˛
do naszej aplikacji bazy danych typu postgresql,
mysql, sqlite3 lub oracle. Wystarczy uzupełnić wpis w pliku settings.py.
Struktura projektu zapewnia możliwość dalszej rozbudowy. W prosty sposób można
uzupełnić system o kolejne moduły czy funkcjonalność dla nowych źródeł danych. Dzi˛eki
Django oraz j˛ezykowi Python, na którym framework został oparty, oszcz˛edza to czas oraz
pieniadze,
˛
co jest bardzo istotne w programowaniu aplikacji i nieprzerwanym rozwoju
technologii informatycznych.
7
Literatura
[1] Definicja WebService
http://pl.wikipedia.org/wiki/Us\T1\luga_internetowa
[2] Definicja REST
http://pl.wikipedia.org/wiki/Representational_State_Transfer
[3] Definicja Django
http://pl.wikipedia.org/wiki/Django_(informatyka)
[4] Django TastyPie
http://www.python.rk.edu.pl/w/p/django-tastypie-czyliwystawianie-restowego-api-w-aplikacjach-django/
[5] Django
https://www.djangoproject.com
[6] BeautifulSoup
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
[7] urllib2
http://www.rwdev.eu/articles/urllib2
[8] dlaczego WebSerwisy
http://searchsoa.techtarget.com/tip/REST-vs-SOAP-How-to-choosethe-best-Web-service
[9] dlaczego Django i REST
http://neo.dmcs.p.lodz.pl/podyplomowe_smtm/webservices/wyklad3_
webservices.pdf
8

Podobne dokumenty