PHP ile web services geliştirme

Posted on 28 Ekim 2009 in Programlama by

web-services-managementWeb services teknolojisi çok ilginç ve bir o kadar da kullanışlı bir teknoloji. Epeydir c++ ile web services geliştirme üzerinde uğraşıyorum. Bu yazımda da php ile client-server tarzında bir web services iletişiminin nasıl olacağı üzerinde bir örnek vereceğim. Bir sonraki yazımda ise gsoap kullanarak C++ ile yazılmış bir istemci ve WSDL+PHP ikilisini kullanan bir sunucu yazılımını yazmayı düşünüyorum. Çok basit olarak belirtmek gerekirse istemci programlar veya sunucular http protokolü üzerinden servera önceden belirlenmiş fonksiyonlar aracılığıyla belirtilen parametreleri sağlayarak iletişimde bulunurlar. İletişim xml formatında verilerin gönderilmesi-alınması ilkesine dayanıyor. Örnek vermek gerekirse iki sunucu düşünün. Birincisi anlık dolar kurunu istekte bulunan sunuculara gönderiyor, diğeri ise bu sunucuya o anki dolar kurununun ne olduğunu soruyor vb. İnterface sunucu üzerinde tanımlandığı için sunucu üzerinde kod güncellemesinin yapılması yeterli olacaktır. Örneğini vereceğim kod üç parçadan oluşuyor. Server-Client-WSDL dosyası. WSDL dosyası server ve client arasında bir köprü görevi görmektedir. Hangi fonksiyonların hangi parametrelerle çağırılabileceği bilgisini istemci tarafa bildirir. WSDL dosyasının oluşturulması için çeşitli programları (Netbeans gibi) webde bulabilirsiniz.

Aşağıdaki sunucu tarafına ait kaynak kodunda NewOperation fonksiyonu kendisine gelen karakter dizisine göre bir eşleme yapmakta ve eşleşen değeri geri göndermektedir.


98.42,
"microsoft" => 24.42);

function NewOperation($symbol) {
if (isset($this->quotes[$symbol])) {
return $this->quotes[$symbol];
} else {
throw new SoapFault("Server","Unknown Symbol '$symbol'.");
}
}
}

$server = new SoapServer("stockquote.wsdl");
$server->setClass("QuoteService");
$server->handle();
?>

Aşağıdaki istemci tarafına ait kaynak kodunda NewOperation fonksiyonuna parametre olarak karakter dizisi gönderilmekte ve cevabın server tarafından gönderilmesi beklenmektedir.

\n"; print($client->NewOperation("ibm")); echo "\n"; print($client->NewOperation("microsoft")); echo "\n

\n";
} catch (SoapFault $exception) {
echo $exception;
}
?>

Aşağıdaki WSDL kaynak kodunda ise iletişimde kullanılan fonksiyonların aldığı parametreler ve dönüş veri tipi belirtilmektedir. WSDL dosyası hem sunucu hem de istemci tarafından kullanılmaktadır.

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions xmlns="http://www.example.org/StockQuote/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StockQuote" targetNamespace="http://www.example.org/StockQuote/">
  <wsdl:message name="NewOperationRequest">
    <wsdl:part name="NewOperationRequest" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="NewOperationResponse">
    <wsdl:part name="NewOperationResponse" type="xsd:float"/>
  </wsdl:message>
  <wsdl:portType name="StockQuote">
    <wsdl:operation name="NewOperation">
      <wsdl:input message="NewOperationRequest"/>
      <wsdl:output message="NewOperationResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="StockQuoteSOAP" type="StockQuote">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="NewOperation">
      <soap:operation soapAction="http://www.example.org/StockQuote/NewOperation"/>
      <wsdl:input>
        <soap:body namespace="http://www.example.org/StockQuote/" use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body namespace="http://www.example.org/StockQuote/" use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="StockQuote">
    <wsdl:port binding="StockQuoteSOAP" name="StockQuoteSOAP">
      <soap:address location="http://localhost/stock4/server2.php"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

Bu yazıda anlatılan kaynak kodlarını denerken WSDL dosyasında yer alan

 <soap:address location="http://localhost/stock4/server2.php"/>

satırını değiştirmeyi unutmayınız.

Dosyayı buradan indir

Please give us your valuable comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Anti-spam image

This site uses Akismet to reduce spam. Learn how your comment data is processed.