İnsanoğlu hala tüm bilgisayarların en alışılmadık olanıdır. Jhon F.Kennedy
11 Ocak 2017 Çarşamba
PHP ' de Web Servis Uygulaması (Server - Client)
Bu yazımda PHP'de nasıl web sunucu ve istemci yazıldığına dair örnek uygulama yaparak, olası hatalar ve açıklamalarla konuya değiniyor olacağım. Uygulamanın sunucu tarafında dışarıdan aldığı iki sayı değişkeninin toplamını veya farkını bulan fonksiyonlar yer alacak.
PHP'de Web Servis Oluşturmak
Bunun için ilk olarak ben soap'ın nusoap toolkitininin kütüphanesini indirerek işe başladım. Kütüphaneyi bu linkten indirebilirsiniz. Kütüphane lib klasörü altında .php dosyalarından oluştuğu için projelere import ederken require_once(‘lib/nusoap.php’); şeklinde kullanmamız gerekecektir. Kütüphaneyi bu şekilde import ettikten sonra aşağıdaki gibi sunucu kodlarını yazıyoruz.
../se/servis.php
<?php
include_once 'lib/nusoap.php'; //nusoap kütüphanesinin sunucuya import edilmesi
$servis = new soap_server(); //yeni bir soap_server nesnesi oluşturmak
$endpoint = "http://domain_adresi/se/servis.php"; //client'ın sunucuya erişimi için soap address oluşturmak
$ns = "urn:serviswsdl"; //xml hedef alan adının tanımlanması
$servis->schemaTargetNamespace = $ns;
$servis->configureWSDL("web-service",$ns,$endpoint);//soap sunucunun xml diline dökümü olan wsdl kodlamasının konfigurasyonu: web servisin adı, xml tabanlı soap hedef sunucu adı ve hedef soap adresinden oluşmaktadır.
//web servisin içinde barındıracağı gerekli işlemleri yapacak olan fonksiyonların tanımlanması
$servis->register("Topla",array('idfield1' => 'xsd:integer', 'idfield2' => 'xsd:integer'), array('return' => 'xsd:string'), $ns); //istemciden alacağı iki sayının toplamını döndüren fonksiyon
$servis->register("Cikar",array('idfield1' => 'xsd:integer', 'idfield2' => 'xsd:integer'), array('return' => 'xsd:string'), $ns); //istemciden alacağı iki sayının farkını döndüren fonksiyon
$servis->register("goster",array('idfield1' => 'xsd:string'), array('return' => 'xsd:string'), $ns); //istemciden aldığı sayıyı ekranda gösteren fonksiyon
- Yukarıda web servise tanımladığımız fonksiyonları aşağıdaki gibi yazıyoruz.
function Topla($idfield1, $idfield2)
{
$toplam = $idfield1 + $idfield2;
$sonuc = "Girilen Sayilarin Toplami:" .$idfield1 ."+" .$idfield2 ."=" .$toplam;
return $sonuc;
}
function Cikar($idfield1, $idfield2)
{
$fark = $idfield1 - $idfield2;
$sonuc = "Girilen Sayilarin Farki:" .$idfield1 ."-" .$idfield2 ."=" .$fark;
return $sonuc;
}
function goster($idfield1)
{
$sonuc = $idfield1;
return $sonuc;
}
//server-client veri iletişimi için gereken kodları aşağıdaki gibi yazıyoruz.
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$servis->service($HTTP_RAW_POST_DATA);
?>
Web Servisin Başarılı Şekilde Oluşturulmuş Halinin Görüntüsü Aşağıdaki gibi Olmalıdır
PHP'de Client Oluşturmak
../se/client.php
Not: Client'ı nusoap kütüphanesini kullanmadan soap servisin kendi fonksiyonlarını kullanarak yazdım. Amaç, nusoap kullanmadan da istemci ve/veya web sunucunun nasıl yazılabileceğini göstermek.
<?php
//Aşağıdaki gibi client'ın tutacağı değerleri değişkenlere aktarıyorum. Bu dışarıdan kullanıcının gireceği değerler şeklinde de olabilir. örnek olması açısından şimdilik değişkenlere sabit değerler atıyorum.
$idfield1 =20;
$idfield2 =30;
$url = "http://domain_address/se/servis.php"; //Buraya yukarıda yazmış olduğumuz servisin yolunu tanımlıyoruz.
//Client'ın sunucuya bağlanırken bilindik hatalarla karşılaşmamak için aşağıdaki gibi konfigurasyonları yazıyoruz.
$opts = array('ssl' => array('verify_peer'=>false, 'verify_peer_name'=>false,'allow_self_signed' => true));
$params = array ('cache_wsdl' => WSDL_CACHE_NONE, 'encoding' => 'UTF-8', 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => true, 'exceptions' => true, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts) );
try {
$client = new SoapClient ( $url . "?wsdl", $params );//Client nesnesinin oluşturulma şekli
//var_dump($client->__getFunctions()); //comment şeklinde bıraktığım bu kod serviste tanımlı tüm fonksiyonları listelemek için kullanılır.
$data = $client->Topla($idfield1,$idfield2); //Client üzerinden servisteki 'Topla' fonksiyonunun çağrılması
var_dump($data);//Sonuç yazdırma..
}
catch(Exception $e)
{
die($e->getMessage());//Client'ın sunucuya bağlanmada veya ilgili fonksiyonlara istekte bulunulduğu karşılaşılacak hataları yakalamak için işlemleri try-catch bloklarını kullanarak yapıyoruz.
}
?>
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder