1 / 44

Robotzsaru oktat ás

Robotzsaru oktat ás. Webszolgáltatás ok Simon Balázs. Tartalom. Integrációs feladat Service Oriented Architecture Web-service SOAP WSDL Webszolgáltatás API-k. Integrációs feladat, Service Oriented Architecture. Feladat: vállalati integráció. Vállalatirányítási rendszer SAP.

Télécharger la présentation

Robotzsaru oktat ás

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Robotzsaruoktatás Webszolgáltatások Simon Balázs

  2. Tartalom Integrációs feladat Service Oriented Architecture Web-service SOAP WSDL Webszolgáltatás API-k

  3. Integrációs feladat,Service Oriented Architecture

  4. Feladat: vállalati integráció Vállalatirányítási rendszer SAP Ügyfelek JEE Termékek .NET ? Oracle DB SQL Server Web-portál PHP MySQL

  5. Feladat: közigazgatási integráció APEH Linux, Oracle OEP Windows, .NET Ügyfélkapu Linux, JBoss ? MÁK Solaris, Sun

  6. Feladat Alkalmazások közötti kommunikáció Különböző programnyelvek Különböző operációs rendszerek Különböző szoftvergyártók Sokfajta meglévő, működő rendszer Integráció Üzleti folyamatok elektronizálása

  7. Követelmények Egyszerű Szabványos Programnyelvektől, operációs rendszertől független Széles körű támogatás Middleware feladatok: • megbízható üzenetküldés • titkosítás, digitális aláírás • tranzakciókezelés Megoldás: SOA, Webszolgáltatások

  8. Service Oriented Architecture Architektúrafejlesztési paradigma Alapegység: szolgáltatás Szereplők (szerepek): • szolgáltató • felhasználó OASIS definíció: • paradigma • elosztott erőforrások és képességek • szervezésére és hasznosítására • felkínálás, felderítés, interakció

  9. Szolgáltatás Külvilág Szolgáltatás Alkalmazás Az architektúra alapegysége Erőforrás vagy képesség publikálása Jól definiált, szabványos interfész Elrejti az implementáció részleteit Lehetőleg minél vékonyabb réteg Fontos a jó tervezés: • a kiajánlott funkcionalitás • a megfelelő granularitás • általánosság • újrafelhasználhatóság

  10. Példák: vállalat szolgáltatások: • ügyfél adatainak lekérdezése ügyfélazonosító alapján • termék adatainak lekérdezése termékazonosító alapján • új ügyfél felvétele • termék készletbe vétele • termék eladása folyamatok: • ügyfél felad egy rendelést

  11. Vállalati integráció Vállalatirányítási rendszer SAP Ügyfelek JEE Termékek .NET ? Oracle DB SQL Server Web-portál PHP MySQL

  12. Példák: közigazgatás szolgáltatások: • lakcím megváltoztatása • adóbevallás fogadása • állampolgár adótartozásának lekérdezése • anyasági támogatás igénylése folyamatok: • lakcímváltozás bejelentése • adóbevallás benyújtása • vállalkozás alapítása

  13. Közigazgatási integráció APEH Linux, Oracle OEP Windows, .NET Ügyfélkapu Linux, JBoss ? MÁK Solaris, Sun

  14. Webszolgáltatás

  15. Webszolgáltatás Konkrét technológia szolgáltatások megvalósításához Szabványos (OASIS, W3C) Programnyelvektől, operációs rendszerektől független XML alapú Szállító protokoll: tipikusan HTTP Elterjedt, széles körben támogatott Számos szabvány middleware feladatokra

  16. Webszolgáltatás UDDI szolgáltatás-katalógus lekérdezés publikálás WSDL felhasználó szolgál-tatás kérés WSDL SOAP WSDL = Web-Services Description Language SOAP = Simple Object Access Protocol UDDI = Universal Description, Discovery and Integration

  17. Webszolgáltatás Definíció: • SOAP üzeneten keresztül meghívható szolgáltatás Üzenetformátum: • SOAP = Simple Object Access Protocol • Használt verziók: 1.1 és 1.2 Interfészleíró: • WSDL = Web-Services Description Language • Használt verziók: 1.1 és 2.0 Szolgáltatáskatalógus: • UDDI = Universal Description Discovery and Integration • Használt verziók: 2.0 és 3.0

  18. Miért? Korábban: CORBA, DCOM DCOM: csak Windows CORBA: • különböző gyártók implementációi közti együttműködés kérdéses • ha sikerülne is, a biztonság és a tranzakciókezelés problémás nem XML alapúak adatformátumok túl alacsony szintűek: byte-ok igazításával is foglalkozni kell tűzfalak, proxy szerverek általában korlátozzák ezeket

  19. SOAP(SimpleObject Access Protocol)

  20. SOAP történet Eredetileg: • 1998. Microsoft • SOAP = SimpleObject Access Protocol • Eredeti cél: XML alapú RPC Ma: • W3C gondozásában • Használt verziók: 1.1 és 1.2 • Már csak a SOAP rövidítés maradt meg, mivel a „SimpleObject Access Protocol” félrevezető

  21. SOAP Kommunikációs protokoll Alkalmazások között XML-re épül Platformfüggetlen Programnyelvfüggetlen Egyszerű Kiterjeszthető • ld. később: WS-* szabványok Független az alatta lévő kommunikációs csatornától, de általában HTTP felett alkalmazzák (így a tűzfalon is átmegy)

  22. SOAP envelope Envelope Header? Saját fejléc* Body Saját tartalom? vagy Fault? <?xmlversion="1.0" encoding="utf-8"?> <env:Envelopexmlns:env="[SOAP névtér]"> <env:Header> <myns:MyHeader1xmlns:myns="[MyNamespace]"/> <myns:MyHeader2xmlns:myns="[MyNamespace]" env:mustUnderstand="1"/> ... </env:Header> <env:Body> ... <env:Fault> ... </env:Fault> </env:Body> </env:Envelope>

  23. SOAP 1.1 SOAP üzenet névtér: • http://schemas.xmlsoap.org/soap/envelope/ WSDL névtér: • http://schemas.xmlsoap.org/wsdl/soap/ HTTP fejlécek: • POST[LokálisURL] HTTP/1.1Content-Type: text/xml; charset="utf-8”SOAPAction: [Action] • a SOAPAction kötelező

  24. SOAP 1.2 SOAP üzenet névtér: • http://www.w3.org/2003/05/soap-envelope WSDL névtér: • http://schemas.xmlsoap.org/wsdl/soap12/ A SOAP 1.1-hez képest más a Fault szerkezete HTTP fejlécek: • POST[LokálisURL] HTTP/1.1Content-Type: application/soap+xml; charset=utf-8; action=“[Action]” • azactionopcionális • a GET is támogatott

  25. WSDL(Web-ServicesDescriptionLanguage)

  26. WSDL Web Services Description Language Leíró Webszolgáltatásokhoz • interfész • meta-adatok • szolgáltatások címei W3C gondozásában Használt verziók: 1.1 és 2.0

  27. WSDL 1.1 definitions import* types? schema* message* abstract part* portType* operation* input? output? fault* binding* operation* input? output? fault* concrete service* port* definitions: gyökér elem import: más WSDL importálása types: a felhasznált típusok • XML schema (XSD) message: paraméterlista • part: paraméter portType: interfész • operation: művelet • input: bemenő paraméterlista • output: kimenő paraméterlista • fault: kivétel binding: hívási konvenció • protokoll, adatformátum, kódolás service: implementáció • port: az adott binding alapján hívható szolgáltatás konkrét helye

  28. WSDL 1.1: típusok XSD-ben <?xmlversion="1.0" encoding="utf-8"?> <xsd:schematargetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" elementFormDefault="qualified"> <xsd:importschemaLocation="..." namespace="[MyNamespace]"/>* <xsd:elementname="[ncname]" type="[qname]"/>* <xsd:complexTypename="[ncname]"/>* </xsd:schema> Jelmagyarázat: [ncname] = név definíció (pl. “Add”) [qname] = név hivatkozás névtérprefixszel együtt (pl. “myns:Add”)

  29. WSDL 1.1:absztrakt rész <?xmlversion="1.0" encoding="utf-8"?> <wsdl:definitionsname="PilotTest" targetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:importlocation="..." namespace="[MyNamespace]"/>* <wsdl:types>? <xsd:schematargetNamespace="[MyNamespace]" elementFormDefault="qualified">* <xsd:importschemaLocation="..." namespace="[MyNamespace]"/>* </xsd:schema> </wsdl:types> <wsdl:messagename="[ncname]">* <wsdl:partname="[ncname]" element="[qname]"/>* </wsdl:message> <wsdl:portTypename="[ncname]">* <wsdl:operationname="[ncname]">* <wsdl:inputmessage="[qname]"/>? <wsdl:outputmessage="[qname]"/>? <wsdl:faultname="[ncname]" message="[qname]"/>* </wsdl:operation> </wsdl:portType> </wsdl:definitions> definitions import* types? schema* message* part* portType* operation* input? output? fault*

  30. WSDL 1.1: konkrét rész <?xmlversion="1.0" encoding="utf-8"?> <wsdl:definitionsname="PilotTest" targetNamespace="[MyNamespace]" xmlns:myns="[MyNamespace]" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"> <wsdl:importlocation="..." namespace="[MyNamespace]"/>* <wsdl:bindingname="[ncname]" type="[qname]">* <wsdl:operationname="[ncname]">* <wsdl:input>...</wsdl:input>? <wsdl:output>...</wsdl:output>? <wsdl:faultname="[ncname]">...</wsdl:fault>* </wsdl:operation> </wsdl:binding> <wsdl:servicename="[ncname]">* <wsdl:portname="[ncname]" binding="[qname]">...</wsdl:port>* </wsdl:service> </wsdl:definitions> definitions import* binding* operation* input? output? fault* service* port*

  31. WSDL 1.1 MEP MEP = Message Exchange Pattern Az input és output operációk meglététől függően

  32. Két szolgáltatás interfészének ekvivalenciája Egyeznie kell: • a types részben felhasznált XSD típusoknak, elemeknek és ezek XML névterének • az Action-nek • a binding beállításainak • a policy beállításoknak • ha az Action nem explicit adott: • a WSDL targetNamespace-ének, a portType, operation, input, output és fault nevének Nem szükséges egyeznie: • a message nevének, a part nevének • a binding nevének • a service nevének, címének • ha az Action explicit adott: • a WSDL targetNamespace-ének, a portType, operation, input, output és fault nevének

  33. WSDL 1.1 összefoglaló

  34. WSDL 2.0 Még nem szabvány, csak ajánlás Nem igazán elterjedt, nem nagyon támogatott Egyszerűbb, mint az 1.1-es verzió Gyökérelem: definitions helyett description Van import és include is Csökkent a redundancia: eltűnt a message rész Készíthetők újrahasznosítható binding-ok Jobban hasonlít a hagyományos programnyelvi interfészekhez: portType helyett interface Megjelent az öröklődés interfészek között (többszörös öröklődés is támogatott)

  35. WSDL 2.0 összefoglaló

  36. Webszolgáltatás API-k

  37. JAX-WS Java API for XML-based Web-Services Célja: • Webszolgáltatások egyszerű implementálása • WSDL és Java osztályok közti leképzés • Annotációkkal Referencia implementáció: • Sun: GlassFish ESB • https://jax-ws.dev.java.net/

  38. JAX-WS példa: interfész @WebService(name = "ICalculator", targetNamespace = "http://ik.bme.hu/WsApi") publicinterfaceICalculator { @WebMethod(operationName = "Divide”) publicdoubledivide( @WebParam(name = "left") doubleleft, @WebParam(name = "right") doubleright) throwsMathFaultFaultMessage; }

  39. JAX-WS példa: implementáció @WebService(endpointInterface = "ICalculator") publicclassCalculatorimplementsICalculator { @Override publicdoubledivide(doubleleft, double right) throwsMathFaultFaultMessage { if(right == 0) { MathFault fault = newMathFault(); fault.setReason("Divisionbyzero."); thrownewMathFaultFaultMessage("Error", fault); } returnleft / right; } }

  40. JAX-WS példa: szolgáltatás meghívása CalculatorService service = newCalculatorService(); Calculatorcalculator = service.getCalculatorPort(); try{ double result = calculator.divide(5, 2); } catch (MathFaultFaultMessage ex){ ex.printStackTrace(); } finally{ ((Closeable)calculator).close(); } A wsimport által generált CalculatorService proxy osztály segítségével Példa:

  41. WCF Windows CommunicationFoundation (.NET 3.0) Célja: • Webszolgáltatások egyszerű implementálása • WSDL és .NET osztályok közti leképzés • .NET attribútumokkal

  42. WCF példa: interfész [ServiceContract(Namespace = "http://ik.bme.hu/WsApi")] publicinterfaceICalculator { [OperationContract] [FaultContract(typeof(MathFault), Name = "MathFault")] doubleDivide(doubleleft, double right); }

  43. WCF példa: implementáció publicclassCalculator : ICalculator { publicdoubleDivide(doubleleft, double right) { if (right == 0) { thrownewFaultException<MathFault>( newMathFault() { Reason = "Divisionbyzero." }); } returnleft / right; } }

  44. WCF példa: szolgáltatás meghívása CalculatorClient calculator = newCalculatorClient(); try { double result = calculator.Divide(5, 2); } catch (FaultException<MathFault> ex) { Console.WriteLine(ex); } finally { calculator.Close(); } Az SvcUtil által generált CalculatorClient proxy osztály segítségével Példa:

More Related