Friday, January 21, 2005

PHP: SOAP Web Service

Sedikit kembali ke PHP... beberapa hari ini...

Web service tidak selalu menggunakan SOAP. Selain SOAP kita bisa menggunakan XML-RPC, atau REST yang lebih simpel. SOAP lebih banyak digunakan dan library-nya pun lebih banyak tersedia. Library SOAP untuk PHP, kita bisa gunakan PEAR::SOAP, NuSOAP, PHP-SOAP atau native exstension library yang sudah ada di PHP5.

PEAR::SOAP saat ini belum ada versi stabilnya tapi saya sudah coba tidak ada masalah untuk digunakan di production. PEAR::SOAP adalah library yang ditulis dengan PHP. Sebelum menginstall PEAR::SOAP, library PEAR harus kita install dulu, kemudian package SOAP dan package dependencies lainnya. Contoh code web service client dengan PEAR::SOAP :
<?
require_once 'SOAP/Client.php';

$wsdl_url = 'http://soap.amazon.com/schemas3/AmazonWebServices.wsdl';

$proxyParams = array(
'proxy_host' => '3.19.19.2',
'proxy_port' => 8080
);

$WSDL = new SOAP_WSDL($wsdl_url, $proxyParams);
$client = $WSDL->getProxy();

$params = array(
'manufacturer' => "O'Reilly",
'mode' => 'books',
'sort' => '+title',
'page' => 1,
'type' => 'lite',
'tag' => 'trachtenberg-20',
'devtag' => 'XXXXXXXXXXXXXX',
);

$books = $client->ManufacturerSearchRequest($params);

//print_r($books);

if ($books->Details) {
foreach ($books->Details as $hit) {
$ProductName = $hit->ProductName;
$Authors = join(' and ', $hit->Authors);

print <<< _HTML_
<div style="clear:left; width: 300px; padding:5px; margin:5px; background:#ddd;">
<a href="$hit->Url"><image src="$hit->ImageUrlSmall" alt="$ProductName" align="left"></a>
<b>$ProductName</b><br/>
By $Authors<br/>
Amazon.com Price: $hit->OurPrice<br/>
</div>
_HTML_;
}
} else {
echo "<b>". $books->userinfo ."</b>";
echo "<br/>";
echo $books->message;

}


?>


NuSOAP kelihatannya juga baik dan sudah dicoba tapi saya belum bisa bandingkan dengan librari yang lain. NuSOAP terbaru dapat di download menggunakan CVS atau didownload manual di http://cvs.sourceforge.net/viewcvs.py/nusoap/. NuSOAP tidak memiliki dokumentasi, API dokumentasinya saja tidak baik. Tapi dengan contoh-contoh kode kita dapat dengan mudah menggunakannya. File-file library NuSOAP terdiri dari :

class.nusoap_base.php
class.soap_fault.php
class.soap_parser.php
class.soap_server.php
class.soap_transport_http.php
class.soap_val.php
class.soapclient.php
class.wsdl.php
class.wsdlcache.php
class.xmlschema.php
nusoap.php
nusoapmime.php


Contoh code web service client menggunakan NuSOAP :

<html>
<head>
<title>Amazon Keyword Search</title>
</head>
<body>
<?
#Use the NuSOAP php library
require_once('nusoap.php');

#Set parameters
$parameters = array('keyword' => $HTTP_GET_VARS['keyword'],
'type' => 'lite',
'page' => '1',
'mode' => 'books',
'tag' => 'insert associate tag',
'devtag' => 'insert developer token');

#Create a new SOAP client with Amazon's WSDL
$soapclient = new soapclient('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl','wsdl', '3.19.19.2', '8080');

#added by ejlp12
$err = $soapclient->getError();
if ($err) {
// Display the error
echo '<p><b>Constructor error: ' . $err . '</b></p>';
// At this point, you know the call that follows will fail
}
//$soapclient->setHTTPProxy('3.193.197.2', '8080');

$proxy = $soapclient->getproxy();

#query Amazon
$results = $proxy->KeywordSearchRequest($parameters);

//echo 'Request: <xmp>'.$proxy->request.'</xmp>';
//echo 'Response: <xmp>'.$proxy->response.'</xmp>';

#Results?
if (is_array($results['Details'])) {
print "<p>Search for <b>" . $HTTP_GET_VARS['keyword'] . "</b>" .
" found " . $results['TotalResults'] . " results." .
" <br>Here are the first " . count($results['Details']).".".
" </p><ol>";
foreach ($results['Details'] as $result) {
print
"<li><b>" . $result['ProductName'] . "</b>" .
"<br /> by " . $result['Authors'][0] .
" <a href='" . $result['Url'] . "'>" . $result['OurPrice']. "</a><br>";
}
print "</ol>";
}

#No Results
else {
print "Your Amazon query for '" . $HTTP_GET_VARS['keyword'] .
"' returned no results";
}
?>
</body>
</html>


Sedangkan PHP-SOAP adalah extension library (dibuat dengan bahasa C sehingga performansinya lebih baik/cepat). Sayangnya baru merilis versi alpha-nya, dan karena dalam PHP5 SOAP extension library sudah ada (walau masih experimental) maka kemungkinan PHP-SOAP ini tidak akan banyak digunakan.

Code diatas diambil dari beberapa situs dan diedit seperlunya (ditambahkan agar dapat digunakan pada server yang ada dibelakang http proxy).

No comments:

Followers