I’m sitting around on a Saturday, trying to cram enough about WebServices in PHP into my head to write a descent SoapServer/SoapClient presentation…when it hits me: “What do you mean I have to write the WSDL myself?!”
PHP 5’s new SOAP extension is just as amazing as the rest of the new XML extensions. If you are new to all of this, don’t fret. SOAP is just a defined way of accessing classes on another server. These classes are exposed as Web Services or (more specifically) SOAP Servers.
[size=larger][b]Hey! Where’s the [i]Wiz-dill[/i][/b][/size]
At the heart of a SOAP conversation is WSDL…the Web Services Definition Language. Now, I’m guessing because PHP is a “mostly” typeless language, the SoapServer extension requires you to provide the WSDL yourself. For the curious, yet uninitiated: WSDL is the definition of what your web service can do. Let’s look a little closer shall we?
For example, you might have a WSDL document that describes your new MicrowaveOven web service. This WSDL document contains the method names, arguments, expected types, etc of your MicrowaveOven.
With this WSDL a SoapClient would know exactly how to ask your $microwaveOven->getTimeRemaining() or be able to $microwaveOven->addMaterial($food). Because all of the conversation’s meta-data is contained in the SOAP Request and Response, it can all happen nearly automatically…depending on your library of choice.
[b][size=larger]The Brighter Future[/size][/b]
Now, if you happen to use .NET or ColdFusion MX, I’m sure you are snickering at the fact we don’t have a WSDL generator. Well, I’m not terribly concerned. Not only is the SoapServer class just getting off the ground, other options in the PHP Community are starting to appear.
For example, if this kind of thing interest you: be sure to keep an eye on Cerebral Cortex. This new PHP 5 framework is looking like an amazing offering. But, of note here are some of the SOAP Web Services Integration pieces. For example, take a look at their examples for their [url=http://synapticmedia.net/cerebralcortex/index.php?area=Main&page=CrtxSoapServer]Crtx_SOAP_Server[/url], [url=http://synapticmedia.net/cerebralcortex/index.php?area=Main&page=CrtxSoapAutoDiscover]Crtx_SOAP_AutoDiscover[/url] and [url=http://synapticmedia.net/cerebralcortex/index.php?area=Main&page=CrtxXmlWsdlCreator]Crtx_XML_WSDL[/url] classes.
The Crtx_SOAP_AutoDiscover uses your phpdoc comments to add the type hinting that is needed for your WSDL. Pretty clever really.
[b][size=larger]So, what about the SOAP talk?[/size][/b]
I think I’ll go ahead and hold off on the Web Services talk until there is some way to have something like (the as yet unreleased) crtx objects make the WSDL for me.
For those of you who were [i]really[/i] wanting to see how to write your own service, or query other SOAP services, I don’t want to leave you out in the cold. Zend has written an excellent article (with lots of pretty examples) on [url=http://www.zend.com/php5/articles/php5-SOAP.php]PHP 5’s SOAP extension[/url].
[b][size=larger]Go take a REST[/size][/b]
‘Course, you could always take the pragmatic aproach, and look at getting a little REST. It might not be as “cool” as SOAP, but it sure is fast and easy! Don’t decide on your webservices strategy until you have read Adam Trachtenberg’s [url=http://www.onlamp.com/pub/a/php/2003/10/30/amazon_rest.html]PHP Web Services Without SOAP[/url]
No, go write me some cool webservices to query up against. 🙂
Happy Coding!