140 likes | 207 Vues
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)
E N D
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 HTML oldallal HTTP válasz 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 (üzleti logika) Webalkalmazások 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-benNuSOAP SOAP szerver <?php //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-benNuSOAP 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-benNuSOAP SOAP kliens <?php // 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-benSzolgá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-benSzolgá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"/> </message> <portType name="tesztPort"> <operation name="lookup"> <input name="tesztRequest" message="tns:tesztRequest"/> <output name="tesztResponse" message="tns:tesztResponse"/> </operation> </portType>
Webszolgáltatások PHP-benSzolgá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> <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost/pelda/"/> </output> </operation> </binding> <service name="tesztService"> <port name="tesztPort" binding="tns:tesztBinding"> <soap:address location="http://localhost/pelda/book.php"/> </port> </service> </definitions>