WebServices w PHP przy użyciu biblioteki NuSOAP

WebServices składa się z serwera i klienta. Ten pierwszy wykonuje całą pracę i odpowiada na żądania tego drugiego. Klient tylko pyta serwer i otrzymuje odpowiedzi.

Oto przykład serwera który posiada dwie funkcje ws_add która dodaje dwa parametry i zwraca wynik oraz ws_date który zwraca aktualną datę w formacie w zależności od parametru:

function dateWs($s) {
    return date($s);
}

function addWs($a, $b) {
    return $a+$b;
}

//------------------------

require_once("lib/nusoap.php");

$ns="http://localhost/";

$server = new soap_server();

$server->configureWSDL('Przykład',$ns);
$server->wsdl->schemaTargetNamespace = $ns;

//------------------------

$server->register('ws_add',
	array('int1' => 'xsd:integer','int2' => 'xsd:integer'), // input parameters
	array('total' => 'xsd:integer'), // output parameter
	$ns, // namespace
	"$ns#add", // soapaction
	'rpc', // style
	'encoded', // use
	'adds two integer values and returns the result' // documentation
	);
function ws_add($int1, $int2){
    return new soapval('return','xsd:integer',addWs($int1, $int2));
}

//------------------------

$server->register('ws_date',
	array('s' => 'xsd:string'), // input parameters
	array('total' => 'xsd:integer'), // output parameter
	$ns, // namespace
	"$ns#date", // soapaction
	'rpc', // style
	'encoded', // use
	'returns the current date, the parameter specifies the date format' // documentation
	);
function ws_date($s){
    return new soapval('return','xsd:string',dateWs($s));
}

//------------------------

$server->service($HTTP_RAW_POST_DATA);

 

 

Klient jest dużo prostszy:

require_once('lib/nusoap.php');
$wsdl = "http://localhost/webservice/server.php?wsdl";
$client = new nusoap_client($wsdl);

$err = $client->getError();
if($err) {
   die($err);
}

//------------------------

$param = array('int1'=>'15.00', 'int2'=>'10');
$result = $client->call('ws_add', $param);
//echo $client->getDebug();
if($client->getError() != false) {
   die($client->getError());
}
echo $result;

//------------------------

$param = array('s'=>'Y-m-d H:i:s');
$result = $client->call('ws_date', $param);
//echo $client->getDebug();
if($client->getError() != false) {
   die($client->getError());
}
echo $result;

Zaletą tej biblioteki jest to że generuje ona kilka przydatnych rzeczy. Na przykład pod adresem http://localhost/webservice/server.php jest ładnie wyglądający opis wszystkich dostępnych na serwerze funkcji.