develop webservice in php
Post on 15-Jan-2015
21.180 Views
Preview:
DESCRIPTION
TRANSCRIPT
Develop a Web service in 5 minutes using nusoap library
Sanil S
Technology Evangelist
http://www.iamatechie.com
My portfolio
Worked as Chief Technology Architect for MobMe
➄ Designed & developed “fastalerts” (Most popular web 2.0 Alert solutions)
➄ Architect design for simple dialer solution for Asterisk calling interface
➄ Asterisk based voice solutions➄ Mobshare mobile content sharing
platform (Acted as a role of developer)➄ Chief Architect IVR solutions for
Vodafone
Who is this talk for?
➲ PHP developers with moderate degree of expertise in PHP
➲ PHP developers wanting to implement SOAP based webservice
➲ PHP developers who think webservices is rocket science
➲ It is not intended for ASP.NET developers
What will be covered
➲ What are web services➲ Basics of SOAP➲ Implementing a simple webservice using
NuSOAP
What is a webservice?
➲ Loosely coupled, reusable software components that semantically encapsulate discrete functionality and are distributed and programmatically accessible over standard Internet protocols
What is a webservice??
➲ Remote Procedure Calling protocol that works over HTTP.
Where to use Webservices?
➲ Retrieve information dynamically over web Service integrations Price comparisons Hotel bookings
➲ Web applications requiring integration with diverse programming languages
Why use PHP
➲ Already a very popular for web development➲ XML support➲ CURL support➲ OOP➲ Potential SOAP extension
SOAP
➲ Simple Object Access Protocol➲ HTTP + XML = SOAP
SOAP Message
➲ Simple Object Access Protocol➲ HTTP + XML = SOAP
SOAP RequestPOST /examples HTTP/1.1User-Agent: Radio UserLand/7.0 (WinNT)Host: localhost:81Content-Type: text/xml; charset=utf-8Content-length: 474SOAPAction: "/examples"
<?xml version="1.0"?><SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body> <m:getCityName xmlns:m="http://www.soapware.org/"> <statenum xsi:type="xsd:int">691003</statenum> </ m:getCityName > </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Soap envelope
Soap body
Http Request header
SOAP ResponseHTTP/1.1 200 OKConnection: closeContent-Length: 499Content-Type: text/xml; charset=utf-8Date: Wed, 28 Mar 2001 05:05:04 GMTServer: UserLand Frontier/7.0-WinNT
<?xml version="1.0"?><SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body> < m:getCityNameResponse xmlns:m="http://www.soapware.org/"> <Result xsi:type="xsd:string">Kollam</Result> </ m:getCityNameResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Soap envelope
Soap body
Http Response header
SOAP FaultHTTP/1.1 500 Server ErrorConnection: closeContent-Length: 511Content-Type: text/xml; charset=utf-8Date: Wed, 28 Mar 2001 05:06:32 GMTServer: UserLand Frontier/7.0-WinNT
<?xml version="1.0"?><SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance">
<SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Client</faultcode> <faultstring>Can't call getCityName because there are too many
parameters.</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Http Response header
What we need in short
➲ XML output is not always simplest to put in PHP code
➲ The XML output is repetitive➲ Most of us are lazy➲ Less work is better
➲ In-Short what is needed is a class which abstracts the SOAP messages for us
NuSOAP Toolkit
➲ Several PHP toolkits available for SOAP➲ NuSOAP usage is simple and efficient➲ Object Oriented ...➲ URL - http://dietrich.ganx4.com/nusoap/➲ Author - Dietrich Ayala➲ Has support for WSDL generation as well
A PHP Function// Return the STD code for the City.
function getCityName ($pincode){
$cityNames = array(‘691003’ => ‘Kollam’, ‘691235’ => ‘Ernakulam’, ‘6945678’ => ‘Trivandrum’);
return $cityNames[‘$pincode’];
}
SOAP Server
require_once('nusoap.php');
$server = new soap_server;
$server->register(getCityName');
$server->service ($_SERVER['HTTP_RAW_POST_DATA']);
exit();
SOAP Client
require_once('nusoap.php');
$param = array(‘pincode'=>’691003’);
$client = new soapclient ('http://localhost/service.php?wsdl');
$response = $client->call(‘getCityName', $param);
$response will now have the City name for the pincode passed as parameter... ...
What is missing?
➲ What if you don't pass a Pincode ?➲ What if you don't get a result?➲ What if....➲ SOAP Fault generation
PHP Function revisted/ Return the STD code for the City.
function getCityName ($pincode){
global $db
if ($pincode == '') {
/* Return a SOAP fault indicating a blank pincode */
return new soap_fault(
'Client', '',
'Must supply a pincode',''
);
}
$cityNames = array(‘691003’ => ‘Kollam’, ‘691235’ => ‘Ernakulam’, ‘6945678’ => ‘Trivandrum’);
return $cityNames[‘$pincode’];
}
SOAP Client revistedrequire_once('nusoap.php');
$param = array(‘pincode'=>’691003’);
$client = $client = new soapclient ('http://localhost/service.php?wsdl');
$response = $client->call('getCityName', $param);
if($client->fault){echo "FAULT: <p>Code: {$client->faultcode} <br />"; echo "String: {$client->faultstring} </p>";
} else{
echo $response; }
Some considerations
➲ SOAP transactions/session ➲ SOAP authentication and security
SOAP Resources
➲ Other PHP SOAP implementations PHP-SOAP Extension Activestate SWSAPI for PHP Manuel Lemos SOAP class
SOAP Resources
➲ SOAP and web services reference sites:
http://www.xml.com/pub/a/2001/04/04/webservices/ XML.com: A Web Services Primer
http://www.w3c.org/tr/soap - SOAP 1.1 specification
http://www-106.ibm.com/developerworks/webservices/ - IBM developerWorks Web Services Zone
Thank you.
top related