SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.



Podobne dokumenty
Równoległość w środowisku rozproszonym. Jarosław Kuchta Programowanie Współbieżne

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Programowanie Komponentowe WebAPI

XML-RPC: Zdalne wykonywanie procedur

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Dostęp do komponentów EJB przez usługi Web Services

RPC Remote Procedural Call. Materiały do prezentacji można znaleźć na stronie:

Komunikacja międzysystemowa

Web Services. Wojciech Mazur. 17 marca Politechnika Wrocławska Wydział Informatyki i Zarządzania

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Komunikacja i wymiana danych

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Bazy Danych i Usługi Sieciowe

Rozproszone technologie Web Services

SCHEMAT DOKUMENTU POTWIERDZENIA GENEROWANEGO PRZEZ ZUS

Programowanie współbieżne i rozproszone

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

76.Struktura oprogramowania rozproszonego.

Integracja Obieg Dokumentów - GiS Spis treści

1 Wprowadzenie do J2EE

1. Uruchomić i skonfigurować środowisko tworzenia aplikacji i serwer aplikacji.

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHNICZNA 1

Usługi sieciowe (Web Services)

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

SIMON SAYS ARCHITECTURE! Usługi zdalne. Technologie, techniki i praktyki implementacji

Wybrane działy Informatyki Stosowanej

Katalog książek cz. 3: Web Service

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Specyfikacja API 1.0. Specyfikacja kontroli Konta systemu CashBill z wykorzystaniem API opartego na REST

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Michał Jankowski. Remoting w.net 2.0

SOAP. Autor: Piotr Sobczak

Wywoływanie metod zdalnych

Programowanie komponentowe

Wprowadzenie do XML schema

Wywoływanie metod zdalnych

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Rozproszone systemy Internetowe

Web Services. Bartłomiej Świercz. Łódź, 2 grudnia 2005 roku. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Web Services

Protokoly w technologii obiektow rozproszonych - CORBA, RMI/IIOP, COM, SOAP. Paweł Kozioł p.koziol@students.mimuw.edu.pl

Wybrane problemy modelu usługowego

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Sieciowe programowanie rozproszone SOA, WebServices i systemy gridowe. Krzysztof Banaś Systemy rozproszone 1

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

PL URZĄD MIASTA SZCZECIN N NOF WPiOL/1111/W/123456/2013 KOWALSKI JAN, FELCZAKA 1A SZCZECIN PLN

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Wielowarstwowe aplikacje internetowe. Web Services. Autorzy wykładu: Maciej Zakrzewicz Marek Wojciechowski. Web Services

Specyfikacja techniczna. mprofi Interfejs API

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Tworzenie i wykorzystanie usług sieciowych

Mechanizmy pracy równoległej. Jarosław Kuchta

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

XML w elektronicznej wymianie danych i integracji aplikacji

Rozdział ten przedstawia jeden ze sposobów implementacji usług sieciowych XML i aplikacji klienckich w PHP. Oprogramowanie

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Gatesms.eu Mobilne Rozwiązania dla biznesu

XML w elektronicznej wymianie danych i integracji aplikacji

Terytorialna analiza danych

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Programowanie obiektowe

Biblioteki dzielone, XML i readline

Tworzenie aplikacji rozproszonej w Sun RPC

Wybrane działy Informatyki Stosowanej

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

HttpRequest Aplikacja Czat

ipfon Web Services API wersja 1.0.3

Programowanie internetowe

Wykład 6 Dziedziczenie cd., pliki

Web Service y w Javie

XML Schema. Motywacja, struktura schematu, typy złożone. Patryk Czarnik. Instytut Informatyki UW

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Spis treści. Dzień 1. I Wprowadzenie (wersja 0906) II Dostęp do danych bieżących specyfikacja OPC Data Access (wersja 0906) Kurs OPC S7

XML Schema. Bartłomiej Świercz. Łódź, 19 listopada 2005 roku. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz XML Schema

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Projektowanie klas c.d. Projektowanie klas przykład

elektroniczna Platforma Usług Administracji Publicznej

XML extensible Markup Language. część 4

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

SOA Web Services in Java

Wstęp do programowania obiektowego. Wykład 2

Załącznik Nr 1 do Uchwały Nr XX/356/11 Rady Miasta Gdańska z dnia 24 listopada 2011 r.

Obiektowe programowanie rozproszone specyfikacja CORBA. Krzysztof Banaś Systemy rozproszone 1

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy programowania. Wprowadzenie

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Wywoływanie procedur zdalnych

Programowanie współbieżne i rozproszone

public interface TravelAgent { public void makereservation(int cruiseid, int cabinid, int customerid, double price); }

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

XML - wprowadzenie. <message> <text> Dobrze </text> </message> <message> <text> Źle </message> </text> <message> <message> <text> Źle.

Wywoływanie procedur zdalnych

SPECYFIKACJA WYMIANY DANYCH POMIĘDZY PROGRAMEM KS-APTEKA WINDOWS I SKLEPEM INTERNETOWYM FIRMY ZEWNĘTRZNEJ

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Tworzenie i wykorzystanie usług

Enterprise JavaBeans

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Transkrypt:

SOAP i alternatywy 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift. 1

WSDL WSDL (Web Services Description Language) jest standardem opisu usług udostępnionych przez protokół SOAP. Obecna wersja protokołu (2.0) została zatwierdzona przez W3C w 2007 roku. Do opisu usług sieciowych wykorzystywany jest format XML. Typowy dokument składa się z kilku części: nagłówek: <?xml version="1.0" encoding="utf-8"?> <description xmlns="http://www.w3.org/ns/wsdl" xmlns:tns="http://www.tmsws.com/wsdl20sample" xmlns:whttp="http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsoap="http://schemas.xmlsoap.org/wsdl/soap/" targetnamespace="http://www.tmsws.com/wsdl20sample"> 2

WSDL <!-- Definicja typów: wywołanie metody i odpowiedź --> <types> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns="http://www.tmsws.com/wsdl20sample" targetnamespace="http://www.example.com/wsdl20sample"> <xs:element name="request"> <xs:complextype> <xs:sequence> <xs:element name="header" maxoccurs="unbounded"> <xs:complextype><xs:simplecontent> <xs:extension base="xs:string"> <xs:attribute name="name" type="xs:string" use="required"/> </xs:extension> </xs:simplecontent></xs:complextype> </xs:element> <xs:element name="body" type="xs:anytype" minoccurs="0"/> </xs:sequence> <xs:attribute name="method" type="xs:string" use="required"/> <xs:attribute name="uri" type="xs:anyuri" use="required"/> </xs:complextype> </xs:element> 3

WSDL <xs:element name="response"> <xs:complextype> <xs:sequence> <xs:element name="header" maxoccurs="unbounded"> <xs:complextype> <xs:simplecontent> <xs:extension base="xs:string"> <xs:attribute name="name" use="required"/> </xs:extension> </xs:simplecontent> </xs:complextype> </xs:element> <xs:element name="body" type="xs:anytype" minoccurs="0"/> </xs:sequence> <xs:attribute name="status-code" type="xs:anysimpletype" use="required"/> <xs:attribute name="response-phrase" use="required"/> </xs:complextype> </xs:element> </xs:schema> </types> 4

WSDL <!-- Definicja interfejsu --> <interface name="jakisinterfejs"> <fault name="clienterror" element="tns:response"/> <fault name="servererror" element="tns:response"/> <fault name="redirection" element="tns:response"/> <operation name="put" pattern="http://www.w3.org/ns/wsdl/in-out"> <input messagelabel="in" element="tns:request"/> <output messagelabel="out" element="tns:response"/> </operation> <operation name="get" pattern="http://www.w3.org/ns/wsdl/in-out"> <input messagelabel="in" element="tns:request"/> <output messagelabel="out" element="tns:response"/> </operation> </interface> 5

WSDL <!-- definiowanie operacji udostępnianych przez SOAP --> <binding name="jakasuslugasoapbinding" interface="tns:restfulinterface" type="http://www.w3.org/ns/wsdl/soap" wsoap:protocol= "http://www.w3.org/2003/05/soap/bindings/http/" wsoap:mepdefault= "http://www.w3.org/2003/05/soap/mep/request-response"> <operation ref="tns:put" /> <operation ref="tns:get" /> </binding> <!-- Określenie punktu końcowego usługi sieciowej --> <service name="jakasusluga" interface="tns:jakisinterfejs"> <endpoint name="jakasuslugasoapendpoint" binding="tns:jakasuslugasoapbinding" address="http://www.example.com/soap/"/> </service> </description> 6

WSDL Przedstawiony dokument defniuje usługę składającą się z dwóch zdalnych metod. Struktura przesyłanych wiadomości jest określona w ekcji <type> natomiast adres, pod który należy kierować żądania w sekcji <service>. WSDL ułatwia pracę z usługami sieciowymi. Na podstawie opisu w WSDL'u można automatycznie tworzyć klasy/procedury łącznikowe realizujące zdalne wywołania SOAP. 7

XML-RPC XML-RPC to protokół zdalnego wywołania procedur używający XML'a do kodowania tych wywołań i protokołu HTTP do ich przesyłania. XML-RPC został opracowany w 1998 roku, a jego ewolucja doprowadziła do powstania SOAP. XML-RPC jest prostszy w użyciu od SOAP głównie dlatego, że dopuszcza tylko jeden rodzaj serializacji, ma prostszy system zabezpieczeń (korzysta z HTTP) nie wymaga (ani nie wspiera) korzystania z WSDL'a. Opis usług jest możliwy poprzez XRDL, który jest znacznie prostszy. 8

XML-RPC Przykładowe typy podstawowe: int: double: string: boolean: date/time: <i4>65</i4> lub <int>65</int> <double>-12.34</double> <string>hello world!</string> <boolean>1</boolean> lub <boolean>0</boolean> <datetime.iso8601>19980717t14:08:55</datetime.iso8601> base64: <base64>sgvsbg8gv29ybgqh</base64> <nil/> 9

XML-RPC Tabele i struktury: <array> <data> <value><i4>1234</i4></value> <value><string>jakis tekst</string></value> <value><boolean>0</boolean></value> </data> </array> <struct> <member> <name>klucz</name> <value><i4>123</i4></value> </member> <member> <name>wartosc</name> <value><i4>2765</i4></value> </member> </struct> 10

XML-RPC Przykład wywołania metody: <?xml version="1.0"?> <methodcall> <methodname>przyklad.getname</methodname> <params> <param> <value><i4>1234</i4></value> </param> </params> </methodcall> <?xml version="1.0"?> <methodresponse> <params> <param> <value><string>programowanie sieciowe</string></value> </param> </params> </methodresponse> 11

XML-RPC Większość popularnych języków programowania posiada biblioteki do obsługi XML-RPC. Najistotniejsze zarzuty do tego standardu: brak możliwości przesyłania danych poza XML'em (np. załączniki w SOAP, nieefektywny format zapisu danych w porównaniu do innych technologii (np. JSON) 12

JSON-RPC JSON-RPC to protokół podobny do XML-RPC jednak do transportu danych wykorzystywany jest format JSON (JavaScript Object Notation). Przykład notacji JSON: { "imię" : "Jan", "nazwisko" : "Kowalski", "adres" : { "ulica" : "Reymonta 4",, "telefon": [ { "numer": "1234567890", { "number": "646 555-4567" ] 13

JSON-RPC Zgodnie z najnowszą (2010) propozycją specyfkacji (2.0) w trakcie komunikacji przekazywane są następujące, przykładowe obiekty: --> {"jsonrpc": "2.0", "method": "subtract", "params": [46, 20], "id": 1 <-- {"jsonrpc": "2.0", "result": 26, "id": 1 --> {"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 2 <-- {"jsonrpc": "2.0", "result": -19, "id": 2 --> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42, "id": 3 <-- {"jsonrpc": "2.0", "result": 19, "id": 3 --> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23, "id": 4 <-- {"jsonrpc": "2.0", "result": 19, "id": 4 14

SOAPjr SOAPjr to połączenie SOAP z JSON-RPC. Przekazywana wiadomość ma nadal strukturę charakterystyczną dla klasycznej wiadomości SOAP, jednak do jej reprezentacji, w miejsce XML'a wykorzystuje się format JSON. Przykład: { "HEAD" : { "service_type" : "contacts", "action_type" : "view", "sid" : "80e5b8a8b9cbf3a79fe8d624628a0fe5", "BODY" : { "username" : "jbloggs" 15

SOAPjr Dzięki swojej prostej strukturze SOAPjr idealnie nadaje się do dostępu do usług sieciowych w aplikacjach wykorzystujących technologię AJAX. Przykładowo, wiadomość z poprzedniego slajdu, przesłana jako argument w komendzie GET (HTTP) ma postać: http://.../service?json={"head": {"service_type":"contacts","action_type":"view", "sid":"80e5b8a8b9cbf3a79fe8d624628a0fe5","body": {"username":"jbloggs" 16

Google Protocol Bufers Protocol Bufers (2011) jest protokołem binarnej serializacji danych i jako taki może być podstawą do tworzenia rozwiązań z zakresu RPC. Został zaprojektowany tak, aby być wydajniejszym i szybszym od XML'a. Podobnie jak inne, analogiczne technologie (CORBA), korzysta z języka opisu interfejsów IDL i na jego podstawie tworzy kod źródłowy operujący na transferowanych danych. Obecnie Protocol Bufer jest dostępny (opensource) dla języków C++, Java i Python. 17

Google Protocol Bufers Przykład (zapis w IDL): message Point { required int32 x = 1; required int32 y = 2; optional string label = 3; message Line { required Point start = 1; required Point end = 2; optional string label = 3; message Polyline { repeated Point point = 1; optional string label = 2; 18

Google Protocol Bufers Przykład operowania na danych (C++): #include "polyline.pb.h" // wygenerowane z interfejsu Line* createnewline(const std::string& name) { Line* line = new Line; line->mutable_start()->set_x(10); line->mutable_start()->set_y(20); line->mutable_end()->set_x(30); line->mutable_end()->set_y(40); line->set_label(name); return line; Polyline* createnewpolyline() { Polyline* polyline = new Polyline; Point* point1 = polyline->add_point(); point1->set_x(10); point1->set_y(10); Point* point2 = polyline->add_point(); point2->set_x(10); point2->set_y(10); return polyline; 19

Apache Thrift Thrift jest podobnym rozwiązaniem do Protocol Bufers. Jego zaletą jest wsparcie dla większej liczby języków programowania (w tym języków skryptowych jak np. PHP, JavaScript, Ruby, Perl). Przykład (Interfejs): struct UserProfile { 1: i32 uid, 2: string name, 3: string blurb service UserStorage { void store(1: UserProfile user), UserProfile retrieve(1: i32 uid) 20

Apache Thrift Przykład (klient w Pythonie): # Steworzenie obiektu up = UserProfile(uid=1, name="test User", blurb="thrift is great") # Nawiazanie polaczenia transport = TSocket.TSocket("localhost", 9090) transport.open() protocol = TBinaryProtocol.TBinaryProtocol(transport) # korzystanie z uslugi - wysylanie service = UserStorage.Client(protocol) service.store(up) # korzystanie z uslugi - odbieranie up2 = service.retrieve(2) 21

Apache Thrift Przykład (serwer w C++): class UserStorageHandler : virtual public UserStorageIf { public: UserStorageHandler() { // inicjalizacja void store(const UserProfile& user) { // implementacja printf("store\n"); void retrieve(userprofile& _return, const int32_t uid) { // implementacja printf("retrieve\n"); ; 22

Apache Thrift int main(int argc, char **argv) { int port = 9090; shared_ptr handler(new UserStorageHandler()); shared_ptr processor(new UserStorageProcessor(handler)); shared_ptr servertransport(new TServerSocket(port)); shared_ptr transportfactory( new TBufferedTransportFactory()); shared_ptr protocolfactory(new TBinaryProtocolFactory()); TSimpleServer server(processor, servertransport, transportfactory, protocolfactory); server.serve(); return 0; 23

Podsumowanie Pomimo, że SOAP jest obecnie najpopularniejszym protokołem do realizacji usług sieciowych, istnieje szereg innych, nowszych technologii. Niektóre z nich mają na celu zastąpienie SOAP, inne natomiast pozwalają efektywniej wykorzystać możliwości związane z programowaniem rozproszonym. 24