NuSOAP ile Webservis Oluşturmak
PHP 5 ile gelen SOAP extension yerine NuSOAP ile webservis oluşturmanın getirdiği en büyük kolaylık, NuSOAP’ın kendisinin wsdl dosyasını otomatik oluşturması.
Bir Webservis en basit şekilde şu şekilde oluşturulabilir;
include('nusoap.php'); // soap kütüphanesini include ettik
$server = new soap_server();
$server->service->charencoding = 'UTF-8'; // türkçe karakterlerde sorun yasamamak icin karakter seti utf-8 yapıyoruz
$server->configureWSDL('Servis','urn:Servis');
// basit bir fonksiyon yazarsak
function SoapDeneme(){
return array('ilk soap servisim');
}
// yazilan fonksiyonu servise register ediyoruz
$server->register("SoapDeneme",array(),array('return' => 'xsd:string'),'urn:Servis','urn:Servis#SoapDeneme','rpc','encoded');
// servisin gelen datayi islemesi icin servisi baslatiyoruz
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
exit;
tabiki yukarıdaki benzeri bir servis hiçbir işinize yaramayacaktır; kendi objeleriniz kendi veri tiplerinizi tanımlamanız gerekecektir.
Kendi veri tipinizi (objenizi) tanımlamak için aşağıdaki addComplexType methodunu kullanmanız gerekiyor.
$server->wsdl->addComplexType('KendiTipim','complexType','struct','all','',
array(
'TipStr' => array('name' => 'TipStr','type' => 'xsd:string'),
'TipDbl' => array('name' => 'TipDbl','type' => 'xsd:double')
));
şeklinde kendi veri tipinizi tanımladıktan sonra bu veritipini bir methoddan döndürmek için ilk önce fonksiyonu aşağıdakine benzer bir şekle getirmeniz gerekiyor;
function SoapDeneme(){
return array('TipStr' => 'methoddan donen string','TipDbl' => (double) 1.10);
}
ardından register ettiğiniz methodu aşağıdaki gibi güncellemek gerekir;
$server->register("SoapDeneme",array(),array('return' => 'tns:KendiTipim'),'urn:Servis','urn:Servis#SoapDeneme','rpc','encoded');
Yukarıdan anlaşılacağı gibi register methodunun 3. parametresi methodun cevap olarak döndüreceği tipi belirliyor.
Kodlanacak serviste tabiki sadece veri döndüren fonksiyonlar değil, veri alan ve bu verilere göre işlem yapan fonksiyonlar da olacaktır; serviste clienttan veri almak için register methodunun ikinci parametresi kullanılır. aşağıdaki fonksiyon client tan ismini alıp Merhaba [Isim] şeklinde cevap döndürür.
function SoapDeneme2($isim){
return array('Merhaba '.$isim);
}
$server->register("SoapDeneme2",array('isim' => 'xsd:string'),array('return' => 'xsd:string'),'urn:Servis','urn:Servis#SoapDeneme2','rpc','encoded');