Geçmişte internete çıkan tek cihaz bilgisayarlarımızdı. Günümüzde artık birçok alet internete çıkabilmektedir. Bir cihazın internete çıkabilmesi demek http protokolü üzerinde başka cihazlarla iletişim kurabilmesidir. Bu noktada devreye web servisler girer. Bir tanım yapmamız gerekirse : İnternete açılabilen cihazlar arasında http protokolünü kullanarak haberleşmeyi sağlayan sistemlere web servis denir. Temel iki çeşit web servis bulunur. SOAP VE REST. Detaylıca bakalım :
Simple Object Access Protocol (SOAP): web üzerinden fonksiyonları kullanmak için geliştirilmiş bir sistemin XML tabanlı kurallar topluluğudur. SOAP ile ilgili bütün mesajlar XML formatında iletilir.
Temel olarak SOAP mesaj üç şekilde oluşturulabilir.
1- Method hazırlama
2- Cevap Mesajı
3- Hata Mesajı
Bir SOAP servisin içeriği hakkında bilgilerin ve istenen standartların sunulduğu WSDL (Web Service Definition Language) dosyasından okunabilmektedir. Örnek bir WSDL gösterelim : https://www.tutorialspoint.com/wsdl/wsdl_example.htm
Contents of HelloService.wsdl file
<definitions name = "HelloService"
targetNamespace = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns = "http://schemas.xmlsoap.org/wsdl/"
xmlns:soap = "http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns = "http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema">
<message name = "SayHelloRequest">
<part name = "firstName" type = "xsd:string"/>
</message>
<message name = "SayHelloResponse">
<part name = "greeting" type = "xsd:string"/>
</message>
<portType name = "Hello_PortType">
<operation name = "sayHello">
<input message = "tns:SayHelloRequest"/>
<output message = "tns:SayHelloResponse"/>
</operation>
</portType>
<binding name = "Hello_Binding" type = "tns:Hello_PortType">
<soap:binding style = "rpc"
transport = "http://schemas.xmlsoap.org/soap/http"/>
<operation name = "sayHello">
<soap:operation soapAction = "sayHello"/>
<input>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</input>
<output>
<soap:body
encodingStyle = "http://schemas.xmlsoap.org/soap/encoding/"
namespace = "urn:examples:helloservice"
use = "encoded"/>
</output>
</operation>
</binding>
<service name = "Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding = "tns:Hello_Binding" name = "Hello_Port">
<soap:address location = "http://www.examples.com/SayHello/" />
</port>
</service>
</definitions
- Definitions − HelloService
- Type − Using built-in data types and they are defined in XMLSchema.
- Message −
- sayHelloRequest − firstName parameter
- sayHelloresponse − greeting return value
- Port Type − sayHello operation that consists of a request and a response service.
- Binding − Direction to use the SOAP HTTP transport protocol.
- Service − Service available at http://www.examples.com/SayHello/
- Port − Associates the binding with the URI http://www.examples.com/SayHello/ where the running service can be accessed.
Representational State Transfer (REST): geliştiricilerin HTTP protokolünü kullanarak GET ve POST gibi isteklerde bulunup, bu isteklere çeşitli formatlarda yanıt aldığı bir dağıtık sistemdir.
REST’in temelde şu mimari stil prensipleri çerçevesinde geliştirilmesi beklenir :
Client-Server, Stateless, Cacheable, Uniform Interface
Kavramları detaylı incelersek :
1.Client – Server : Server, kullanıcı etkileşimlerini idare eden bir client ile iletişim kurar.Diyelim ki https://www.wikipedia.org/ adresine bağlandığımızda wikipedia server biz client oluyoruz. Client, server tarafındaki veri kaynağı ile ilgili hiçbir şey bilmez. Server sadece kendisine gelen istekler doğrultusunda değer döner.
2.Stateless : Server client ile ilgili hiç bir bilgiyi tutmamalıdır demiştik. Client tarafından gerçekleştirilen her istek (request), server’in response dönebilmesi için geçerli bilgiyi taşımalıdır. Client ayrımı request esnasında göndereceği bir token veya kimlik bilgisi ile gerçekleştirilir. Kimlik bilgisi için cookie’yi örnek verebiliriz.
3.Cacheable : Server response’ların önbelleklenebilir olup olmadığını belirtmelidir. Böylece, altyapılar ve client’lar performansı artırmak için mümkün olduğunda önbellekleyebilir. Önbelleğe alınamayan bilgileri elden çıkarabilirler, böylece hiçbir client stale data kullanmamış olur.
4. Uniform Interface : Client ile server arasındaki ortak bir arayüzün (interface) olması ile birbirlerinden bağımsız bir şekilde geliştirilebilmesi mümkün olur. Ortak bir haberleşme dilinin olması anlamında da yorumlanabilir. Mesela biz bir üniverstenin web servisine bağlanıp 110 numaralı öğrencinin bilgisini almak istediğimizde server ile şu şekilde iletişim kurarız : http://www.itü.edu.tr/student/id/110
RESTFULL SERVİS NEDİR?
Web servislerin REST mimarisi ile yazıldığı uygulamalara denir. Http protokolerine göre yazılır. Http protokolünden kastedilen GET, DELETE, POST, PUT metodları ile işlem yapmaktır.
Eğer bütün kullanıcıları çekmek istersek çağırılan web servisin veri tabanından post kullanmamız gerek :
GET http://www.appdomain.com/users
123 nolu kaydı sildirmek istersek :
DELETE http://www.appdomain.com/users/123
123 nolu kullanıcının bilgilerinde güncelleme yapmak istersek :
PUT http://www.appdomain.com/users/123
123 nolu yeni bir kayıt eklemek istersek :