Günümüzde web servis olarak iki tip mimari yaklaşım yaygın olarak kullanılmaktadır. SOAP (Simple Object Access Protocol – Basit Nesne Erişim Protokolü) ve REST (Representational State Transfer – Temsili Durum Transferi). Bu yazımızda bu iki yaklaşıma ve aralarında farka değineceğiz.
SOA Nedir?
Öncelikle SOAP’ın SOA ile aynı olmadığını vurgulamak önemlidir. Bazen kafa karışıklığına yol açabileceğini biliyoruz, çünkü bunlar benzer terimlerdir, ancak oldukça farklı anlamlara sahiptir.
SOA (Service-Oriented Architecture), uygulamaların servisler aracılığıyla entegrasyonuna dayanan bir tür yazılım mimarisidir. Bu hizmetler şunlardır: besteler, BPM, proxy’ler ve hatta API’ler.
REST ve SOAP aynı zamanda servisleri gerçekleştirmenin bir yoludur ve yüzeyde aynı işlevselliği sunan ve aynı şekilde davranan teknolojilerdir. REST ve SOAP aynı SOA mimarisini takip eder.
REST Web Services Nedir?
REST (Representational State Transfer), web gibi dağıtılmış hypermedia sistemlerini hedefleyen bir yazılım mimarisi tarzıdır. Bu terim, özellikle ağ mimarilerinin tasarımı için bir ilkeler koleksiyonuna atıfta bulunur. REST mimarisinden yararlanabilecek birkaç proje vardır. Özellikle, ilgili bir kaynağa dayalı olarak client tarafından server isteklerinin yapıldığı işler.
Bir REST mimarisinin 6 ilkeye uyması önemlidir.
- Client – Server
- Uniform Interface
- Cacheable
- Stateless
- Layered
- Code-on-demand
SOAP Web Servis Nedir?
SOAP veya Simple Object Access Protocol (Basit Nesne Erişim Protokolü) servisidir. SOAP, genellikle HTTP kullanan bilgisayar ağları üzerinden mesaj alışverişi için bir protokoldür. Bu protokol, XML’e dayalıdır ve mesajlar daha uzun ve dolayısıyla aktarımı oldukça yavaş olsa bile okumayı kolaylaştırır. Bunlar, REST yerine SOAP kullanmak için bazı nedenler olabilir.
Google, Facebook ve birçok bankacılık kuruluşu, şu anda web servislerini uygulayan uygulamaları kullanan başlıca web sitelerinden bazılarıdır.
Artık REST ve SOAP servislerinin ne olduğunu anlamak daha kolay, bu kavramların her birinin avantajlarını ve bunları kendi durumumuza nasıl uygulayabileceğimizi daha derine inebiliriz.
Örnek bir SOAP Request (Istek)
POST http://www.alanadi.com/cgi/websvccal.cgi HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "http://www.alanadi.com/Calendar#date"
Content-Length: 479
Host: www.alanadi.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
<?xml version="1.0"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:cal="http://www.alanadi.org/Calendar">
<soapenv:Header/>
<soapenv:Body>
<cal:easter_date soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<year xsi:type="xsd:short">2014</year>
</cal:easter_date>
</soapenv:Body>
</soapenv:Envelope>
SOAP Response (Yanıt)
HTTP/1.1 200 OK
Date: Fri, 22 Nov 2013 21:09:44 GMT
Server: Apache/2.0.52 (Red Hat)
SOAPServer: SOAP::Lite/Perl/0.52
Content-Length: 566
Connection: close
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<namesp1:easter_dateResponse
xmlns:namesp1="http://www.stgregorioschurchdc.org/Calendar">
<s-gensym3 xsi:type="xsd:string">2014/04/20</s-gensym3>
</namesp1:easter_dateResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
REST Web Servis Nedir?
REST API, REST’in tasarım ilkelerine uyan bir API’dir. Bu nedenle, REST API’leri bazen RESTful API’leri olarak adlandırılır.
REST API’leri, bir kaynak içinde kayıt oluşturma, okuma, güncelleme ve silme (CRUD olarak da bilinir) gibi standart veritabanı işlevlerini gerçekleştirmek için HTTP istekleri aracılığıyla iletişim kurar. Örneğin, bir REST API, bir kaydı almak için bir GET isteğini, bir tane oluşturmak için bir POST isteğini, bir kaydı güncellemek için bir PUT isteğini ve bir kaydı silmek için bir DELETE isteğini kullanır. API çağrılarında tüm HTTP metotları kullanılabilir. İyi tasarlanmış bir REST API, yerleşik HTTP işlevine sahip bir web tarayıcısında çalışan bir web sitesine benzer.
REST API talep doğrultusunda bilgileri bir istemciye JSON, HTML, XLT, Python, PHP veya düz metin dahil hemen hemen her biçimde iletilebilir. Hem insanlar hem de makineler tarafından okunabilir ve programlama dilinden bağımsız olmasından dolayı JSON bu konuda öne çıkar.
Örnek bir REST Request (Istek)
GET http://www.alanadi/data.js HTTP/1.1
Accept-Encoding: gzip,deflate
Host: www.alanadi.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
SOAP Response (Yanıt)
HTTP/1.1 200 OK
Date: Fri, 22 Nov 2013 22:32:22 GMT
Server: Apache
ETag: "b8a7ef8b4b282a70d1b64ea5e79072df"
X-Runtime: 13
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 209
Status: 200
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: js; charset=utf-8
{
"link": "alanadi\/\/item\/36",
"item": "Title",
"a": "...",
"position": 36,
"q": "..."
}
REST ve SOAP Farkları
SOAP ve REST web servisleri arasındaki temel farklar şunlardır:
REST Avantajları | SOAP Avantajları |
Çok kaynakla az operasyon | Az kaynakla çok operasyon |
Dağıtılmış hypermedia sistemleri için ölçeklenebilirlik ve büyük ölçekli performansa odaklanır. | Dağıtılmış uygulamaların tasarımına odaklanır. |
HTTP GET, HTTP POST, HTTP PUT, HTTP DEL | SMTP,HTTP POST, MQ |
Self-describing XML | Strong typing, XML Schema |
Senkron | Senkron ve ASenkron |
HTTPS | WS SECURITY |
Uçtan uca güvenli iletişim | Başlangıç noktasından varış noktasına güvenli iletişim |
- REST API, client-server iletişimini sağlayan bir mimaridir.
- REST API, HTTP protokolünü üzerinden işlem gerçekleştirir. SOAP ise RPC gibi daha kompleks mimariler ile çalışır.
- REST API, SOAP’a kıyasla daha basit ve hızlıdır. Ayrıca SOAP kadar katı standartlara sahip değildir.
- Katı kurallar sayesinde güvenliği sağlamada SOAP daha üstündür.
- SOAP güvenlik protokollerini üzerinde taşır, state bilgisini istek ve yanıtlarda saklar.
SOAP birçok şirket için tercih edilen bir seçenek olsa da, bazen çok karmaşık ve yeterince esnek olmayabilir. Bu nedenle birçoğu, büyük miktarda veriyi yönetmek için REST tabanlı hizmetleri kullanmaya başlıyor. Her iki bilgi mimarisinin de kendine özgü özellikleri var, ancak görünüşe göre gelecekte daha büyük bir kabul görecek olan REST.