Webszolgáltatás: WSDL és SOAP alapok II. rész (példa)
Előző részben nagyon egyszerű példán keresztül mutattuk meg, hogy miként épül fel egy WSDL dokumentum. Megígértem, hogy a cikket folytatni fogom, és be fogom mutatni hogy a WSDL dokumentumot és a SOAP protokollt felhasználva milyen egyszerűen tudunk webszolgáltatást használni. Lássuk tehát a példát…
SOAP Szerver oldali PHP szkript
<?php ini_set("soap.wsdl_cache_enabled","0"); $server = new SoapServer("hello.wsdl"); class HelloService{ function doHello($yourName){ if (strlen(trim($yourName))) { return "Szia, ".$yourName; } else { throw new SoapFault("Server","Nem adtad meg a nevedet!"); } } } $server->setClass("HelloService"); $server->handle(); ?>
A példa a PHP5 beépített SOAP könyvtárát használja. PHP 4 alatt a nuSOAP-al próbálkozhatunk, erre azonban példát most nem hozunk. A használata nagyon hasonló, szinte csak szintaktikai különbségek vannak.
Nézzük a kód magyarázatát. Mivel fejlesztésről van szó a WSDL állományok gyorsítótárazását kikapcsoljuk a 2. sorban. Ezután létrehozunk egy SOAP szervert, gyakorlatilag példányosítjuk a megfelelő osztályt, amelynek konstruktorában átadjuk a WSDL állományunk elérési útvonalát és nevét.
Készítünk egy osztályt, ami a WSDL dokumentumban meghatározott függvényeket valósítja meg. A neve szabadon választható, jelen esetben HelloService, de a függvények nevei nem. A doHello nevű függvénynek, és annak bemenő és kimenő paramétereinek egyeznie kell a WSDL dokumentumban leírtakkal. Ebben azt írtuk, hogy egy bemenő és egy kimenő paramétere van a doHello függvénynek. A függvény mindössze annyit tesz, hogy a bemenő paraméterként kapott nevet felhasználva, üdvözlő szöveget küld vissza.
A definiált osztályt a SOAP szervernek átadjuk értelmezésre, és meghívjuk a SOAP szerver handle() függvényét. Ezzel meg is írtuk a Hello.wsdl-ben foglalt webszolgáltatás szerver oldalát. Amennyiben a webszolgáltatás szerver oldalát máshol futtatnánk, ne felejtsuk el átírni a szolgáltatást leíró WSDL dokumentum 56. sorában a szolgáltatás elérhetőségének URL-ét.
SOAP kliens oldali PHP szkript
<?php ini_set("soap.wsdl_cache_enabled","0"); try{ $sClient = new SoapClient('http://www.php-blog.hu/peldak/soap/hello.wsdl'); $response = $sClient->doHello('Polonkai Gabor'); echo $response; } catch(SoapFault $e){ var_dump($e); } ?>
Mint a példából is látszik a kliens oldali PHP szkript is végtelenül egyszerű. Try-catch blokkban megpróbáljuk példányosítani a SoapClient osztályt, aminek konstruktorában átadjuk a szolgáltatást leíró WSDL dokumentum URL-ét. Ezután az osztály lekezeli a SOAP üzenetek és válaszok generálását, valamint biztosítja a felületet a webszolgáltatás leírásában definiált függvények használatához. A példányosítás után meghívjuk a webszolgáltatás egyetlen definiált függvényét, amelynek átadjuk az egyetlen bemenő paramétert. Visszatérési értékét a kimenetre írjuk. Hiba esetén a hibát tartalmazó objektumot a kimeneten részletezzük. Természetesen a WSDL dokumentum illetve a SOAP szervert futtató PHP szkript bármelyik másik szerveren elhelyezhető.
SOAP példa PHP alatt: letöltés
A példa állományok letölthetőek: SOAP PHP-vel példa. Ugyanakkor a kisérletezést megkönnyítendő, a példában bemutatott webszolgáltatást elérhetővé tettük, amelynek WSDL dokumentuma a következő URL-en érhető el: http://www.php-blog.hu/peldak/soap/hello.wsdl


21 hozzászólás, szólj hozzá Te is!
vik
Köszöntem szépen Mester!
Végre egy Soap-szerver kód, ami úgy tünik mindenhol működik. Már találtam neten pár ilyet, de egyik sem akart még mindenhol gond nélkül futni. Ez az első ami nekem problémamentes, és egyben az első ami magyar nyelvű oldalon találtam.
Mondjuk aki kockának áll, az egyben vállalja is hogy a szakma nyelve angol, de azért üdítő egy magyar nyelvű szinvonalas blogra akadni. Remélem hosszúéletű lesz a blog, én rövid idő alatt megkedveltem.
2008. 04. 29.
vik
Ja, és két apróság. (bár ez OFF)
A rendszeróra nem az igazi, vagy az időzóna nem, vagy valami…
Illetve jó lenne egy favicon, a bookmarkok és az rss olvasók miatt is.
2008. 04. 29.
Polonkai Gábor
vik: köszönöm a biztató szavakat
Igen, az angol elengedhetetlen, de ugye mennyivel egyszerűbb magyar nyelven kommunikálni és javaslattot tenni? Személy szerint úgy vagyok vele, hogy egy magyar blogon sokkal könnyebben kommentelek és mondom el a véleményem. Faviconon már 1 hete gondolkodom, még nem találtam igazán jó ihletet, de ígérem lesz ilyen. A rendszeróra érdekes lehet, kíváncsi vagyok, hogy ha most postolok milyen timestamp-el kerül az adatbázisba, megjelenítésbe stb. Ki fogom deríteni.
2008. 04. 29.
kuczfer
Nagyon jó, hogy publikálva lett a SOAP téma. Sokaknak jó fog jönni. Talán még a fontosabb PEAR csomagok bemutatása se lenne hülyeség. Sok embernek nagy segítség lehet.
2008. 05. 31.
MIKI
Szuper ez a cikk, én személy szerint most értettem meg a web szolgáltatások működését….nagyon köszönöm Gábornak ezt a remek ismertetőt pontosan azt írta le amit keresgéltem már pár hónapja, de sehol nem találtam…..
2008. 08. 02.
Black
Helló!
Nagyon jó a cikk! Gratula érte! Eddig nem tudtam mi az a SOAP (még nem kellett használnom), most kezdtem el utána nézni, és örülök hogy megtaláltam ezt az oldalt! Igy már sejtem hogy mire is lehet használni
2008. 08. 06.
Najdorf
Én is csak hasonló dolgokat tudok mondani, mint a többiek.
Mondjuk én nem vagyok php guru:), de simán megértettem.
Nagyon érthetően írtad le.
Már várom, hogy többet megtudjak a Webservicekről:).
Köszönöm én is a tanultakat!!!
Csak így tovább!
2008. 12. 05.
Polonkai Gábor
Najdorf, köszönöm a biztató hozzászólásodat! Hamarosan megírom a harmadik részét, iratkozz fel az RSS-re és értesülni fogsz róla!
2008. 12. 07.
Najdorf
Kérdés: még él a bemutatott webszolgáltatás?
valamint ha kiszeretném próbálni, akkor a zip-ben szereplő clienst és servert is létre kell hoznom?
Vagy csak a clienst, amivel csatlakozhatok a webszolgáltatáshoz és a servert már megírtátok?
Java-ban írnám meg a clienst és ha kell, akkor a servert is.
Előre is köszi!
2008. 12. 09.
Polonkai Gábor
Még él a szolgáltatás, nyugodtan megírhatod Java-ban a klienst. A WSDL fájl url-jét megtalálod a zipben található kliens php-ban, ha az megy, akkor szervert is meg kell írnod.
2008. 12. 09.
Najdorf
Re:)!
Sikerült eredményeket elérnem a java “világában” is a webservicek terén!!!
Sokat segített Polonkai Gábor blogja, ezért gondoltam megosztom veletek, hátha Gábor hozzá tudja fűzni a blogjához.
Kis tutorialok:
- Apache tomcat alatt: http://www.p2pgridbook.com/coresite/WebServices/deploy.html
- Jboss server alatt: http://www.javabeat.net/articles/40-creating-webservice-using-jboss-and-eclipse-europa-1.html
Remélem segíthettem:P
2009. 01. 06.
Najdorf
Ajánlom figyelmetekbe a jws-t és az axis-t.
A jws-nél annotációk segítségével (hasonló a java commentekhez pl.: @…) lehet elérni a webservice-t és generálni is lehet java kód segítségével wsdl-et nagyon egyszerűen.
Az axis-nál szükség van egy wsdd-re, amiből java osztályokat generál az axis. A wsdd nagyon hasonlít a wsdl-re és van konvertálási lehetőség is. Ebben nem mélyültem el, én inkább kézzel írnám meg a wsdl-ből a wsdd-t. Kicsit más a szintaktikája.
2009. 01. 06.
Polonkai Gábor
Szia Najdorf!
Köszönöm a linkeket! Java-val nem foglalkozok erősen, de a tapasztalat mindig jól jön!
A másik, hogy PHP alatt is létezik olyan online tool, ami WSDL-ből generálja a PHP osztályt.
http://1018-media.com/wsdlstubgen/
Illetve php osztályból WSDL
Ez is egy érdekes framework:
http://wso2.org/projects/wsf/php
Illetve PHP osztályból WSDL generálás:
http://www.phpclasses.org/browse/package/3509.html
Megmondom őszintén ezeket nem próbáltam még ki személyesen, de hamarosan ki fogok próbálni néhány hasonlót is.
2009. 01. 07.
Joe
Szia Gábor!
Nagyon jó a cikk, gratulálok hozzá. Van viszont egy problémám. Az én esetemben nem LAMP van, hanem Apache/2.0.59 (NETWARE) PHP/5.0.5 mod_jk/1.2.21. Hozzáteszem, nem vagyok php-s, de most így kéne megoldanom egy ws-es feladatot.
Első körben a kliens kódot próbáltam futtatni, de nem tudta példányosítani a SoapClient classt, mert nem találta… Mi a teendő ilyenkor?
Köszi előre is,
J
2009. 02. 25.
Najdorf
Azért jöhetett volna már válasz:S
2009. 04. 09.
Isotec
Szia Gábor!
Nagyon remek és hasznos volt számomra ez a két rész és kérdezném, hogy lesz-e folytatása?
Köszi
Csak így tovább!!!
2009. 06. 04.
Najdorf
Idézet:
“Polonkai Gábor
Najdorf, köszönöm a biztató hozzászólásodat! Hamarosan megírom a harmadik részét, iratkozz fel az RSS-re és értesülni fogsz róla!
2008. 12. 07.”
2009. 06. 08.
X4K
Hali! Én is csak gratulálni tudok a cikkhez, mert nagyon hasznos és érthető. Kérdezném, hogy nem tervezed-e az NuSOAP-os változat elkészítését? Szerintem sokunknak segítenél vele, mert sajnos még mindig vannak olyan fizetős tárhelyszolgáltatók, akik csak PHP4-et telepítenek.
2009. 06. 30.
Paleko
Most, hogy a demo programból a távoli szerveremről “üdvözöltél”, rendkívül elégedett vagyok:) Szuper a cikk, és hogy egy működő példaprogramom van, ez csak hab a tortán!
Nagyon szépen köszönöm a segítséget, amelyet nyújtottál nekünk!
2010. 03. 17.
Polonkai Gábor
Paleko: örülök hogy segíthettem!
X4K: jelenleg nem tervezem, mert elég sok teendő összejött az utóbbi időben. Azonban ha lesz egy kis időm, meg fogom csinálni.
2010. 04. 01.
rahzel
Bárcsak suliba is így magyaráznák
2010. 05. 06.
Hozzászólás írása: “Webszolgáltatás: WSDL és SOAP alapok II. rész (példa)”