SOAP ve Rest servisler arasındaki fark
Bu yazıyı bir araştırma yaparken bir blog da okudum. Yazının içeriğini beğendiğim için kendi blogumda bir kopyasının durmasını istedim. Ayrıca ufak tefek eklemlerle daha anlaşılır hale gelmesi için kendim eklemelerde bulundum.
Yazının orjinal URL ; http://osmansoylemez.com/?p=207
Web Servisler uygulamalar tarafından kullanılan metodların bir sunucu üzerinde çalıştırılıp değer döndürmesini sağlayan yapılardır. Böylece farklı uygulamalarda veya farklı teknolojilerle kullanabileceğimiz metodları bir kere yazıp platformdan bağımsız bir şekilde çalıştırabiliriz.
Web servis mimarisinin temeli HTTP üzerine kurulmuştur. Yani genel olarak web servise bir istek gelir ve web servis bu isteği yapıp bir sonuç döndürür. Web servisin bu işlemi yapabilmesi için tanımlanmış farklı yöntemler bulunmaktadır. Bu yazıda bahsedilecek olan yapılardan biri SOAP protokolü diğeri ise REST’dir.
SOAP (Simple Object Access Protocol) uygulamalar ile web servislerin bilgi aktarımını sağlayan XML tabanlı bir protokoldür. Yani web servise giden bilgi XML olarak gönderilir, web servis bu bilgiyi yorumlar ve sonucunu XML olarak geri döndürür. SOAP tabanlı bir web servisin, gönderilen XML verisini nasıl yorumlayacağının tanımlanması gerekir. Bu web servis tanımlaması WSDL standardı ile yapılır.
REST mimarisinde ise işlemler resource kavramıyla yapılır. Resource URI ile tanımlanır ve bir metod tanımlaması veya bir değişken olabilir. Yani REST’te SOAP’ta olduğu gibi XML yardımıyla metodlar çağırılmaz bunun yerine o metodu çağıracak URIler ile web servise HTTP protokolüyle istek yapılır. Böylece REST için WSDL gibi bir tanımlama diline ihtiyaç kalmaz işlemler tamamen HTTP metodları üzerinden yapılır. Örneğin, bir web servisin metodunu SOAP ile “getProductName” şeklinde çağırırken REST ile “/products/name/1″ URI’si ile çağırabiliriz. Ayrıca RESTin döndürdüğü veri tipinin de XML olması zorunlu değildir JSON, XML, TXT, HTML gibi istenen veri türünde değer döndürülebilir.
[raw] [/raw]
HTTP metodların REST ile kullanımı;
REST tabanlı web servislerde HTTP metodlarına özel anlamlar yüklenir ve böylece web servise bir HTTP isteği geldiği anda metod çalıştırılmış olur. Bu durumda HTTP metodlarının REST ile nasıl kullanılacağı önemlidir.
REST’de iki tip URI vardır. Bunlardan biri Collection URI diğeri Element URI’dir.
Collection URI ; array, list gibi veri yapıları için kullanılır. Örnek kullanım şekli; http://example.com/resources
GET : Belirtilen collection’ın URI’lerini veya detaylarını listelemede kullanılır.
PUT: Bütün bir collection’ı başka bir collection’la yer değiştirmek için kullanılır.
POST: Yeni bir collection oluşturmak için kullanılır ve yeni oluşturulan collection’ın URI’si döndürülür.
DELETE: Tüm Collection’ı silmek için kullanılır.
Element URI ise değişkenler üzerinden işlem yapmak için kullanılır. Örnek kullanım şekli; http://example.com/resources/item/17
GET: Adresi verilen nesneyi döndürmek için kullanılır.
PUT: Var olan bir nesneyi değiştirmek için veya eğer yoksa yeni bir tane oluşturmak için kullanılır.
POST: Yeni bir nesne oluşturmak için kullanılır. Her seferinde yeni bir nesne oluşturur.
DELETE: Adresi verilen nesneyi silmek için kullanılır.
HTTP Metodların anlamları;
GET metodu ‘nullipotent’ olarak adlandırılır. Bu metot kullanıldığında kayıtlarda bir değişiklik yapılmaz sadece olan veriler döndürülür.
PUT ve DELETE metotları ‘idempotent’ olarak adlandırılır. Bu terim, PUT ve DELETE metotları her çağrıldıklarında aynı sonucu döndürdüklerini belirtir. POST böyle değildir her çağrıldığında farklı bir sonuç döndürür.
PUT ile yapılan bir işlem POST ile de yapılabilir fakat aralarındaki fark tarayıcıların bu iki metodu farklı yorumlayıp iki metot için farklı tepkiler verebilmesidir.
REST ile SOAP karşılaştırması;
- SOAP XML veri tipini desteklerken REST istenen veri türüyle işlem yapabilir. JSON veri tipi ile XML’den çok daha düşük boyutlarla veri tutulabildiği için REST ile daha hızlı işlem yapılabilir.
- Ayrıca SOAP için WSDL ile tanımlama yapmak gerekirken REST için böyle bir zorunluluk yoktur. (WADL REST için kullanılan WSDL’e benzer bir yapıdır fakat kullanma zorunluluğu yoktur.) Bir dile ihtiyaç duymadan HTTP metodlarıyla tasarlanabildiği için REST’i kullanması ve tasarlaması daha kolaydır.
- SOAP için birçok geliştirme aracı mevcuttur, REST için geliştirme araçlarına ihtiyaç duyulmaz, tasarlaması kolaydır.
- SOAP; XML-Scheme kullanırken REST; URI-scheme kullanır yani metotlar için URI’ler tanımlanır.
- Her ikisi de HTTP protokolünü kullanırlar. Fakat REST için HTTP zorunluluğu varken SOAP; TCP, SMTP gibi başka protokollerle de çalışabilir.
- Test ve hata ayıklama aşaması REST için daha kolaydır. Çünkü HTTP hatalarını döndürür ve bunlar bir toola ihtiyaç duyulmadan görülebilir. SOAP için hata ayıklama araçları gerekebilir.
- REST basit HTTP GET metodunu kullandığı için cacheleme işlemi daha kolaydır. SOAP ile cacheleme yapabilmek için karmaşık XML requestleri yapılmalıdır.
- İkisi de HTTPS destekler, SOAP için WS-SECURITY adlı bir eklenti mevcuttur.
- Güvenlik açısından SOAP daha gelişmiştir çünkü hazır yapılar bulunmaktadır.
- Dokümantasyon bakımından SOAP daha gelişmiştir ve daha fazla kaynak bulunmaktadır.
[raw] [/raw]
Kimler SOAP Kullanıyor?
Buna verilebilecek en büyük örnek Google. Blogger dışında bir çok uygulamasında SOAP kullanıyor. Bir çok kurumsal yazılımda SOAP kullanıldığını görebilirsiniz.
Kimler REST Kullanıyor?
Neredeyse Yahoo’nun tüm servisleri REST kullanır. Amazon ve eBay hem SOAP hem de REST mimarilerini kullanmaktadırlar.
Konu içeriğinde geçen WSDL için daha detaylı açıklama :
WSDL(Web Services Description Language):
WSDL, XML tabanlı web servisleri tanımlamak ve yerini belirtmek için tanımlanmış dildir. WSDL, W3C standardıdır. Bir anlamda dağıtık programlamada kullanılan IDL’e (Interface Definition Language – Arayüz Tanımlama Dili) benzer. Web servisi tanımı işlemler, giren ve çıkan mesaj formatları, ağ ve port adresleri gibi bilgileri tanımlar. Bir web servisi tanım belgesi aşağıdaki temel elemanları içerir:
- Types: mesajlarda kullanılacak veri tiplerini belirtir.
- Message: İletişimde kullanılacak measjları tanımlar.
- PortType : Web servisinin içerdiği işlemleri (methods) ve ilgili mesajları tanımlar.
- Binding : İşlem ve mesajlarda kullanılacak veri formatlarını tanımlar.
- Port: Binding ve web adresinden oluşan servis noktasını tanımlar. Web adresi servisin çalıştırılacağı URL’dir.
- Service: Kullanılan port’lar kümesidir.
Örnek olarak :
http://www.mac-stl.org/A_Master/Net/NET_Calendar/Mobile/MobileCalService.asmx web servis linki dir bu ekrana girdiğinizde web servis methodlarını göreceksiniz.
Ekran Görüntüsü :
.asmx ten sonra ?wsdl yazdığımızda wsdl i görüntüleyebiliriz.
http://www.mac-stl.org/A_Master/Net/NET_Calendar/Mobile/MobileCalService.asmx?wsdl
Ekran Görüntüsü :
[raw] [/raw]
Soap Servisleri testi için SoapUI yazılımını
Rest Servisler için Google Chrome eklentisi olarak Postman kullanmayı tavsiye ederim.
İyi günler dilerim – Salih ŞEKER