Aplicatii Web bazate pe semantica agenti si servicii
Aplicatii Web bazate pe semantica, agenti si servicii http: //turing. cs. pub. ro/webs_08 Universitatea Politehnica Bucuresti Anul universitar 2008 -2009, Master Adina Magda Florea Chapter 1 Service-Oriented Computing: Semantics, Processes, Agents
Servicii Web n n n Servicii SOA Standarde SOAP WSDL UDDI
Servicii Web n n Serviciile Web au aparut ca o tehnologie comuna de integrare Serviciile Web par a fi baza noii generatii de aplicatii distribuite Arhitecturile Orientate pe Servicii utilizeaza servicii Web Orchestrarea serviciilor permite orientarea pe servicii
Service Oriented Architecture n SOA este un pattern arhitectural n n n mai multi consumatori de servicii mai multi ofertanti de servicii potential, mai multe directoare de servicii
Service Oriented Architecture n n Servicii autonome (de dorit) Comunicare bazata pe mesaje Alinierea cu procesul de business Serviciile sunt blocurile constructive ale aplicatiilor: n n B 2 B (Business to Business) A 2 A (Application to Application)
Standarde pentru servicii Web
Servicii Web: arhitectura de baza Service Broker Publish or announce (WSDL) Service Provider Not well-known Registry; well-known Find or discover (UDDI) Bind or invoke (SOAP) Service Requestor
Profil de baza (BP 1. 0) n Web Services Interoperability Organization (WS-I) a specificat Basic Profile version 1. 0: n n n SOAP 1. 1 HTTP 1. 1 XML 1. 0 XML Schema Parts 1 and 2 UDDI Version 2 WSDL 1. 1
Descrierea unui serviciu n n n Nume e. g. , Get. Temperature Tipul parametrilor de intrare e. g. , (String, String) Tipul parametrilor de iesire e. g. , Integer
SOAP (Simple Object Access Protocol) n n n Folosit pentru schimbul de mesaje HTTP, SMTP si SIP (Session Initiation Protocol for Internet telephony) Proiectat initial pentru "remote-procedure calls" (RPC) Bazat pe caractere, deci usor de incriptat/decriptat Ineficient deoarece este bazat pe caractere (si nu binar) Nu descrie interactiuni bidirectionale si n-party
Ex. Cerere SOAP POST /temp HTTP/1. 1 Host: www. socweather. com Content-Type: text/xml; charset="utf-8" Content-Length: xxx SOAPAction: "http: //www. socweather. com/temp" <!– Ce este deasupra sunt HTTP headers --> <? xml version=“ 1. 0”? > <env: Envelope xmlns: env="http: //schemas. xmlsoap. org/soap/envelope/" env: encoding. Style="http: //schemas. xmlsoap. org/soap/encoding/"/> <env: Body> <m: Get. Temp xmlns: m="http: //www. socweather. com/temp. xsd"> <m: City>Honolulu</m: City> <m: When>now</m: When> </m: Get. Temp> </env: Body> </env: Envelope>
Ex. Raspuns SOAP HTTP/1. 1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: xxx SOAPAction: "http: //www. socweather. com/temp" <? xml version=“ 1. 0”? > <env: Envelope xmlns: env="http: //schemas. xmlsoap. org/soap/envelope/" env: encoding. Style="http: //schemas. xmlsoap. org/soap/encoding/"/> <env: Body> <m: Get. Temp. Response xmlns: m="http: //www. socweather. com/temp. xsd"> <Degrees. Celsius>30</Degrees. Celsius> </m: Get. Temp. Response> </env: Body> </env: Envelope>
WSDL: Web Services Description Language n Descrie o interfata a unui serviciu Web, incluzand: n n n Definitii ale tipurilor de date Formatul mesajelor de intrare si iesire Operatiile oferite de un serviciu Adrese de retea Protocol bindings
Modelul de date WSDL
Ex. WSDL <? xml version="1. 0"? > <!– elementul radacina, wsdl: definitions, defineste o multime --> <!– de servicii corelate --> <wsdl: definitions name="Temperature" target. Namespace="http: //www. socweather. com/schema" xmlns: ts="http: //www. socweather. com/Temp. Svc. wsdl" xmlns: tsxsd="http: //schemas. socweather. com/Temp. Svc. xsd" xmlns: soap="http: //schemas. xmlsoap. org/wsdl/soap/" xmlns: wsdl="http: //schemas. xmlsoap. org/wsdl/">
Ex. WSDL <!-- wsdl: types incapsuleaza definitii de schema a tipurilor --> <!-- comunicarii; aici utilizand xsd --> <wsdl: types> <!– toate declaratiile de tip sunt exprimate in xsd --> <xsd: schema target. Namespace="http: //namespaces. socweather. com" xmlns: xsd="http: //www. w 3. org/1999/XMLSchema"> <!-- xsd def: Get. Temp [City string, When string] --> <xsd: element name="Get. Temp"> <xsd: complex. Type> <xsd: sequence> <xsd: element name="City" type="string"/> <xsd: element name="When" type="string"/> </xsd: sequence> </xsd: complex. Type> </xsd: element>
Ex. WSDL <!-- xsd def: Get. Temp. Response [Degrees. Celsius integer] --> <xsd: element name="Get. Temp. Response"> <xsd: complex. Type> <xsd: all> <xsd: element name="Degrees. Celsius" type="integer"/> </xsd: all> </xsd: complex. Type> </xsd: element> <!-- xsd def: Get. Temp. Fault [error. Message string] --> <xsd: element name="Get. Temp. Fault"> <xsd: complex. Type> <xsd: all> <xsd: element name="error. Message" type="string"/> </xsd: all> </xsd: complex. Type> </xsd: element> </xsd: schema> </wsdl: types>
Ex. WSDL <!– elementele wsdl: message descriu tranzactii potentiale --> <!– Cele mai multe mesaje, asa ca aici, au o singura parte. Mesajele --> <!– cu ma multe parti ofera posibilitatea de a asambla mesaje complexe --> <!-- cererea Get. Temp. Request este de tipul Get. Temp --> <wsdl: message name="Get. Temp. Request"> <wsdl: part name="body" element="tsxsd: Get. Temp"/> </wsdl: message> <!-- raspunsul Get. Temp. Response este de tipul Get. Temp. Response --> <wsdl: message name="Get. Temp. Response"> <wsdl: part name="body" element="tsxsd: Get. Temp. Response"/> </wsdl: message> <!-- wsdl: port. Type descrie mesajele dintr-o operatie --> <wsdl: port. Type name="Get. Temp. Port. Type"> <!-- wsdl: operation descrie intregul protocol de la intrare --> <!– la iesire sau eroare --> <wsdl: operation name="Get. Temp"> <!– Ordinea intrarii si iesirii este importanta; input --> <!– inainte de output indica cerere-raspuns (request-response) --> <wsdl: input message="ts: Get. Temp. Request"/> <wsdl: output message="ts: Get. Temp. Response"/> <wsdl: fault message="ts: Get. Temp. Fault"/> </wsdl: operation> </wsdl: port. Type>
Ex. WSDL <!-- wsdl: binding indica un protocol de serializare --> <!– pentru serviciu --> <wsdl: binding name="Temp. Svc. Soap. Binding" type="ts: Get. Temp. Port. Type"> <soap: binding style="document" transport="http: //schemas. xmlsoap. org/soap/http"/> <wsdl: operation name="Get. Temp"> <soap: operation soap. Action="http: //www. socweather. com/Temp. Svc"/> <!– specifica faptul ca mesajul din --> <!-- wsdl: operation "Get. Temp" foloseste SOAP? @@@ --> <wsdl: input> <soap: body use="literal" namespace="http: //schemas. socweather. com/Temp. Svc. xsd"/> </wsdl: input> <wsdl: output> <soap: body use="literal" namespace="http: //schemas. socweather. com/Temp. Svc. xsd"/> </wsdl: output> <wsdl: fault> <soap: body use="literal" namespace="http: //schemas. socweather. com/Temp. Svc. xsd"/> </wsdl: fault> </wsdl: operation> </wsdl: binding>
Ex. WSDL <!-- wsdl: service denumeste un serviciu nou "Temperature. Service" --> <wsdl: service name="Temperature. Service"> <wsdl: documentation>socweather. com temperature service </wsdl: documentation> <!– conectarea la "Temp. Svc. Soap. Binding" --> <wsdl: port name="Get. Temp. Port" binding="ts: Temp. Svc. Soap. Binding"> <!– ofera legatura la adresa de retea --> <soap: address location="http: //www. socweather. com/Temp. Svc"/> </wsdl: port> </wsdl: service> </wsdl: definitions>
Directorul de servicii n Permite descoperirea serviciilor de catre aplicatii, agenti, ofertanti de servicii Web, clienti de servicii Web, persoane, obiecte, care se pot localiza n n White pages – cautare pe baza de nume Yellow pages – cautare pe baza de caracteristici Basic directory – poate fi o simpla baza de date (pasiva) sau un broker/facilitator (activ, care alerteaza si recruteaza participanti) UDDI – atat white pages cat si yellow pages, dar pasive
UDDI: Universal Description, Discovery, and Integration n n UDDI este un serviciu Web bazat pe SOAP si XML UDDI Registry 1. t. Models: descrierea tehnica a comportarii unui serviciu 2. business. Entities: descrie specificatiile t. Models multiple
Yellow, Green, si White Pages in UDDI
Modelul UML pentru Business Entity intr-un UDDI Registry
Structurile de date de baza pentru UDDI
Corespondenta WSDL UDDI
O cerere catre UDDI Registry Un registru UDDI actioneaza ca un serviciu <? xml version="1. 0" encoding="UTF-8"? > <find_business xmlns="urn: uddi-org: api_v 3"> <find. Qualifiers> <find. Qualifier> uddi: uddi. org: findqualifier: exactmatch </find. Qualifier> </find. Qualifiers> <!—gaseste informatii despre companiile cu numele (exactmatch) "Weather. Service Inc. " --> <name>Weather. Service Inc. </name> </find_business>
Raspuns de la UDDI Registry <? xml version="1. 0" encoding="UTF-8"? > <business. List> <business. Infos> <business. Info business. Key=". . . KO. . . "> <name>Weather. Service, Inc. </name> <service. Infos> <service. Info service. Key=". . . KN. . . " business. Key=". . . K 1. . . "> <name>Temperature Service</name> </service. Infos> </business. List>
Slide-uri bazate pe: n Service-Oriented Computing: Semantics, Processes, Agents – Munindar P. Singh and Michael N. Huhns, Wiley, 2005
- Slides: 29