Programowanie Komponentowe WebAPI dr inż. Ireneusz Szcześniak jesień 2016 roku
WebAPI - interfejs webowy WebAPI to interfejs aplikacji (usługi, komponentu, serwisu) dostępnej najczęściej przez Internet, ale może to być usługa w sieci lokalnej, albo lokalnym systemie. Usługę dostępną przez Internet nazywamy web service. WebAPI najczęściej używana w aplikacjach webowych. WebAPI może być zdefiniowana z użyciem: JSON, YAML, Google Protocol Buffers, WSDL, SOAP, XML, własnościowe, jak Java RMI czy.net. Najpopularniejsze WebAPI: JSON w modelu REST po HTTP, bo jest prosty i korzysta z gotowych i sprawdzonych technologii. Zaleta #1: WebAPI jest całkowicie niezależne od platformy. Zaleta #2: pozwala na pełną separację serwera i klienta. slajd 2
Model REST Representational state transfer (REST) REST jest modelem komunikacji klient-server. Protokołem warstwy aplikacji ISO/OSI dla REST jest HTTP. Korzysta z metod HTTP: GET, POST, PUT, DELETE, itd. Idea REST: aplikacja webowa przechodzi między swoimi stanami przez wykonanie metod. Komunikacja bezstanowa (stateless), czyli serwer: wykonuje usługę tylko z użyciem danych w żądaniu przesłanym przez klienta, nie pamięta historii komunikacji z klientem, przechowuje dane dla aplikacji webowej. REST = reprezentacyjna zmiana stanu slajd 3
JSON JSON = JavaScrip Object Notation JSON to tekstowy język opisu danych, podzbiór języka JaveScript. Prosty w nauczeniu się, prosty w implementacji, mniej błędów. Mały narzut danych organizacyjnych. Wspierany przez przeglądarki WWW, bo one obsługują JavaScript. Posiada wiele bibliotek dla wielu języków. Mniejsze możliwości mogą okazać się lepsze (less is more). Przykład: Google Photos udostępnia WebAPI w JSONie. slajd 4
JSON - przykład { } NAME: " A l b e r t A t t a r d ", LANGUAGE: " Java ", LOCATION : " Malta ", EXAM: { SUBJECT : " Programming ", GRADE: 4. 5 } slajd 5
YAML YAML = Yaml Ain t Markup Language YAML to tekstowy język opisu danych YAML jest rozszerzeniem języka JSON Tak więc narzędzie YAML wczyta dane JSON YAML koncentruje się na czytelności YAML ma kilka rozszerzeń, których brakuje w JSONie YAML jest używany przez projekt Swagger slajd 6
YAML - przykład f a k t u r a : VAT123/2016 data : 2012 08 06 k l i e n t : i m i e : I r e k nazwisko : S z c z e s n i a k slajd 7
WSDL, SOAP, CORBA Są zbiorem spefyfikacji i implementacji dla rozproszonej komunikacji. Pozwalają zdefiniować dane i operacje na danych. Bardzo rozbudowane narzędzia, których część funkcjonalności jest rzadko stosowana. Problem: implementacje rzadko stosowanych funkcjonalności często mają błędy. Moje doświadczenie: błąd w implementacji w CORBY zatrzymał projekt na kilka tygodni. WSDL, SOAP i CORBA są rzadko stosowane, bo są trudne w użyciu. Można się z nimi ciągle spotkać, na przykład w bazach danych ORACLE. slajd 8
Google Protocol Buffers Format przesyłu binarnych i skompresowanych wiadomości. Pozwala na definicję typów wiadomości, co jest kompilowane przez dostarczony kompilator do biblioteki, którą używamy w swoim kodzie. Wspiera różne języki: C++, Java, C#, Python. Nie pozwala na dynamiczoną modyfikację typów wiadomości, co czyni z niego niszowy protokół komunikacji międzyserwerowej, ale bardzo wydajny. Zachowuje kompatybilność między różnymi wersjami wiadomości. slajd 9
Java RMI Java Remote Method Invocation (RMI) Protokół komunikacji klient-server w Javie. Implementuje obiekty zdalne i wywołanie metod na tych obiektach. Java załatwia serializację obiektów, co pozwala RMI na przesyłanie obiektów. Zaawansowane, nowatorskie, łatwe i wygodne w użyciu narzędzie. Jedna z perełek programowania. Stosuje odpowiedzi zwrotne inicjowane przez serwer, które nie przechodzą przez translację adresów IPv4, co przekreśla RMI w Internecie. Zastosowanie: skomunikacja oprogramowania w Javie w sieciach lokalnych. WADA: serwer i klient są ze sobą ściśle związani. slajd 10
API Blueprint, Swagger Pozwalają na definiowanie WebAPI aplikacji: typów danych, możliwych operacji, dokumentacji, testów. Generują kod dla różnych języków. API Blueprint (Swagger już nie) generuje kod w C++ dla klienta i serwera. Wolne oprogramowanie (licencje MIT, Apache) Dostarczają narzędzia do testowania WebAPI. API Blueprint będziemy używać na laboratorium. slajd 11
Podsumowanie WebAPI jest głównie dla aplikacji webowych. WebAPI jest niezależnym od platformy interfejsem usługi. WebAPI pozwala na pełną separację klienta i serwera. WebAPI tworzyć najlepiej z JSON, REST i HTTP. Narzędzia WebAPI: API Blueprint, Swagger. slajd 12
Dziękuję za uwagę.