Webszolgáltatások PHP-ben Dr. Alvarez Gil Rafael főiskolai docens Kecskeméti Főiskola, GAMF Kar, Informatika Tanszék alvarez.rafael@gamf.kefo.hu
Webszolgáltatások 1999: a Hewlett-Packard bevezette a köztudatba a webszolgáltatások elvét (e- Speak) 2000: a Microsoft bevezeti a webszolgáltatás (web service) kifejezést a kezdeti .NET és internetes szoftverfejlesztés kulcselemeként Ma: szinte minden vezető szoftvergyártó árulja a webszolgáltatásokhoz kapcsolódó szoftvereszközöket és alkalmazásokat
Webszolgáltatások Alapkoncepciója az RPC (Remote Procedure Call) Új elem a platformfüggetlen szabványok használata, XML-re épülő technológia Megvalósítási elemek elrejtése a kliens alkalmazás elől Működésük az internetre jellemző heterogén környezetben is garantált
Emberközpontú Web HTTP válasz HTML oldallal HTTP GET Webszerver Webböngésző
Alkalmazásközpontú Web Webszolgáltatások alkalmazásával XML válasz Alkalmazás XML kérés Webszerver Más alkalmazások
Üzleti alkalmazások Webszolgáltatások Webalkalmazások (üzleti logika) Más (pl. Windows) alkalmazás Adatbázisok
Webszolgáltatások protokolljai Szolgáltatás-átvitel: HTTP XML alapú üzenetkezelés: SOAP (Simple Object Acces Protocoll) Szolgáltatás XML alapú leírása: WSDL (Web Services Description Language) Szolgáltatás felkutatása: UDDI (Universal Description, Discovery and Integration)
Webszolgáltatások PHP-ben A legelterjedtebb könyvtár PHP-re: NuSOAP http://dietrich/ganx4.com/nusoapl PHP osztályokat tartalmaz SOAP szolgáltatások létrehozásához és alkalmazásához. PHP 5-ben megjelent egy kiterjesztés SOAP szerverek és kliensek létrehozására KÍSÉRLETI JELLEGGEL. Ez azt jelenti, hogy minden dokumentált működés, beleértve a függvények nevét, működését vagy bármi más, amit a kiterjesztés kapcsán szerepel megváltozhat egy későbbi PHP kiadásban minden figyelmeztetés nélkül.
Webszolgáltatások PHP-ben NuSOAP SOAP szerver //Szolgáltatás, amely adatbázisból ad vissza egy árat function lookup($ISBN){ if ($connect = mysql_connect("localhost", "root", "mysql")); else { return -2; } mysql_query('SET CHARACTER SET latin2',$connect); if (mysql_select_db("books")); else { return -3; } $query = "select price from books where isbn = '".$ISBN."'"; if ($result = mysql_query($query, $connect)); else { return -4; } if(! $row = mysql_fetch_array($result)) return -1; $price = $row['price']; if($price == 0) { return -5; } return $price; }
Webszolgáltatások PHP-ben NuSOAP SOAP szerver //SOAP osztályok beillesztése require_once("nusoap.php"); //szerver objektum létrehozása $server = new soap_server(); //A szolgáltatás regisztrálása $server -> register("lookup"); //A válasz, mint SOPAP válasz küldése a HTTP-n $server->service($HTTP_RAW_POST_DATA); ?>
Webszolgáltatások PHP-ben NuSOAP SOAP kliens // A SOAP osztályok beillesztése require_once('nusoap.php'); $certificaterequired = false; // Kliens objektum definiálása $client = new soapclient('http://localhost/pelda/book.wsdl', true); // Paramétertömb definiálása az ISBN-számhoz $param = array('isbn'=>'0385503954'); // Hívás $price = $client->call('lookup',$param); if ($price < -1) { print "Hiba: ". $price;} else if ($price == -1) {print "A könyv nem található az adatbázisban.";} else {print "A ". $param['isbn'] ." számú könyv ára: ". $price ."Ft";} unset($client); ?>
Webszolgáltatások PHP-ben Szolgáltatás leírása (WSDL) <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://localhost/pelda/" targetNamespace="http://localhost/pelda/"> <types> <xsd:schema targetNamespace="http://localhost/pelda/" xmlns:ns1="http://localhost/pelda/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <xsd:complexType name="tesztParams"> <xsd:all> <xsd:element name="string" type="xsd:string"/> </xsd:all> </xsd:complexType> <xsd:element name="tesztParams" type="ns1:tesztParams"/> </xsd:schema> </types>
Webszolgáltatások PHP-ben Szolgáltatás leírása (WSDL) <message name="tesztRequest"> <part name="isbn" type="xs:string"/> </message> <message name="tesztResponse"> <part name="return" type="xs:integer"/> <portType name="tesztPort"> <operation name="lookup"> <input name="tesztRequest" message="tns:tesztRequest"/> <output name="tesztResponse" message="tns:tesztResponse"/> </operation> </portType>
Webszolgáltatások PHP-ben Szolgáltatás leírása (WSDL) <binding name="tesztBinding" type="tns:tesztPort"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="lookup"> <input> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/pelda/"/> </input> <output> </output> </operation> </binding> <service name="tesztService"> <port name="tesztPort" binding="tns:tesztBinding"> <soap:address location="http://localhost/pelda/book.php"/> </port> </service> </definitions>