Wednesday, January 12, 2011

Setting up a web service SERVER script in native PHP

This post will assist you on how to setup a web service server script using native PHP library. please follow the steps below.

1. create a class with all the methods you want to be accessible via web service. i created a simple class with a simple helloWorld method just for us to have it work.

class wservice {
    public function helloWorld($world) {
        return 'hello ' . $world;
    }
}

2. create WSDL of your web service. please take note that PHP doesn't support automatic generation of WSDL. hence, you should do it manually. WSDL should be created based on the function of your class above and definitions composes of the following elements: message, portType, binding, and service. save the file as wservice.wsdl for the next step.

<?xml version='1.0' encoding='UTF-8'?>
<definitions name="HW" targetNamespace="urn:HW" xmlns:typens="urn:HW" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
        <message name="helloWorld">
                <part name="world" type="xsd:string"/>
        </message>
        <message name="helloWorldResponse">
                <part name="return" type="xsd:integer"/>
        </message>
        <portType name="HWPortType">
                <operation name="helloWorld">
                        <documentation>
                        </documentation>
                        <input message="typens:helloWorld"/>
                        <output message="typens:hellowWorldResponse"/>
                </operation>
        </portType>
        <binding name="HWBinding" type="typens:HWPortType">
                <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="helloWorld">
                        <soap:operation soapAction="urn:HWAction"/>
                        <input>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                        <output>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </output>
                </operation>
        </binding>
        <service name="HWService">
                <port name="HWPort" binding="typens:HWBinding">
                        <soap:address location="webservice.php"/>
                </port>
        </service>
</definitions>

3. once your done with your WSDL, it's time to initialize the server, pass the path of the WSDL file that you just created and the name of the class that you just created.

ini_set("soap.wsdl_cache_enabled", "0");
$server = new SoapServer("wservice.wsdl",array('soap_version' => SOAP_1_2));
$server->setClass("wservice");
$server->handle();

4. and that's it! please see the complete code below for the server end-point script and wsdl.

- wservice.php

<?php

class wservice {
    public function helloWorld($world) {
        return 'hello' . $world;
    }
}

ini_set("soap.wsdl_cache_enabled", "0");

$server = new SoapServer("wservice.wsdl",array('soap_version' => SOAP_1_2));
$server->setClass('wservice');
$server->handle();

?>

- wservice.wsdl

<?xml version='1.0' encoding='UTF-8'?>
<definitions name="HW" targetNamespace="urn:HW" xmlns:typens="urn:HW" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
        <message name="helloWorld">
                <part name="world" type="xsd:string"/>
        </message>
        <message name="helloWorldResponse">
                <part name="return" type="xsd:integer"/>
        </message>
        <portType name="HWPortType">
                <operation name="helloWorld">
                        <documentation>
                        </documentation>
                        <input message="typens:helloWorld"/>
                        <output message="typens:hellowWorldResponse"/>
                </operation>
        </portType>
        <binding name="HWBinding" type="typens:HWPortType">
                <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
                <operation name="helloWorld">
                        <soap:operation soapAction="urn:HWAction"/>
                        <input>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </input>
                        <output>
                                <soap:body namespace="urn:HW" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
                        </output>
                </operation>
        </binding>
        <service name="HWService">
                <port name="HWPort" binding="typens:HWBinding">
                        <soap:address location="wservice.php"/>
                </port>
        </service>
</definitions>

No comments:

Post a Comment