Bu yazıda php’de soap kullanımının avantajı ve bazı durumlarda gereksizliğini anlatmaya çalışıcağım .Soap xml tabanlı bir erişim protokolü .
Nerelerde kullanılıyor derseniz , haber sitelerinin farklı yerlerden verileri çekmesinde , alış veriş sitelerinin {en ucuzu com , gitti sattım gidiyor } gibi sistemler farklı platformlardan {teknosa gibi} ürünleri .wsdl formatında çekip sistemlerinde parse ediyorlar . Platform bağımsız oluşu artılarından , ancak kullancağınız dile göre sistemin kodlanması configi verilere ulaşımı sıkıntı . Benzer şekilde platform bağımsız php ile web servis yazmak aslında çok kolay
Tanımlanan fonksiyonları call etmek , verileri bunlara göre döndürmek bir yöntem fakat zahmetli bir iş .
Bunun yerine facebook Twitter wordpress gibi sistemler xml ya da json array göndermeyi tercih ediyorlar neden ?
Farklı farklı fonksiyonları call etmek zorunda değilsiniz query string’e göre verileri değiştirebilirsiniz , örneğin emrekaratasoglu.com/mydataService.php?getCategory=5&limit=5&orderBy=name&type=ASC. Ben bunu nasıl yapabilceğimizi anlatmak istiyorum .
Soap ile ilgili birçok kaynak mevcut bu tarz webservis daha hızlı pratik bir çözüm sunabiliyor bize .
Bu kısımda yapmamız gereken servis sayfamızın hangi parametleri beklediğini dökümente edip paylaşmak . Anlatıcağım kısım php için ama benzer sistemi .net ile de yapabilirsiniz.
Ürünlerimin ve ürünlerin kategorilerinin olduğu aynı zamanda bunların fiyatlarının ve stok bilgilerinin olduğu tabloların oluşturduğu bir veritabanım var oldugunu varsayalım .
bu durumda ,
normal query’im
select urunler.* , urunCategory.categoryName , urunFiyat.fiyat from urunlerTable urunler inner join urunCategoryTable urunCategory on urunCategory.categoryId = urunler.categoryId inner join urunFiyatTable urunFiyat on urunFiyat.urunId = urunler.Id
eğer query stringimdeki
category_id , urun_id , limit gibi parametreler boş gelirse direk bu sorgunun sonucu döner {
<? $categoryId= isset($_REQUEST["category_id"]) ? $_REQUEST["category_id"] : ""; ?>
}
boş değilse
sorguma sadece where urunCategory.categoryId= $categoryId
diyerek ya da limit order by gibi parametreler için bu tarz $addSql değişkenleri oluşturulabilir .
Geriye sonucu döndürmek kalıyor .
Bu kısımda da 2 alternatif sunabilriz.
1. Xml
2.Json
Xml için datayı foreachle döndürüp
<myRoot> <category id=''> <urun id=></urun> </categoryId=''> </myRoot>
tarzında bir xml döndürebiliriz.
ya da
return json_encode($returningArray)
diyebilriz.
Web Servis için yazıcağımız dökümanda
parametreler ve
verilere nasıl erişilceğini de yazdığımızda web servisimiz tamamlanmış olacaktır .
Php kısmında veriye erişim için
xml için simplexml_load_file fonksiyonu
json için json_decode(file_get_contents($url))
fonksiyonu işi görücektir. Örnek bir uygulamayı veritabanı + kod + örnek isteklerle beraber ekli dosyada php web servisi paylaştım.