26 Haziran 2015 Cuma

REST nedir? SOAP ile arasındaki farklar nelerdir?

Web Servisler, temelde HTTP protokolünü kullanarak, platformdan bağımsız metodlar ile ortak veri formatında veri alış verişinin yapılmasını sağlayan yapılardır. REST ve SOAP;  Web Servis teknolojilerinde günümüzde çok tercih edilen veri iletişim protokolleri,yöntemleri arasında yer alır. SOAP (Simple Object Access Protocol – Basit Nesne Erişim Protokolü);  iletilen veri türünün XML olması gereken veri transfer yöntemidir. SOAP tabanlı bir web servis, WSDL(Web Services Description Language) standardında gönderilen XML verisini yorumlamak zorundadır.
REST(Representational State Transfer – Temsili Durum Transferi); iletilen verilerin türünün bilinmediği veri transfer yöntemidir. 2000 yılında HTTP spesifikasyonunun yazarlarından biri olan Roy Fielding tarafından doktora tezinin bir parçası olarak geliştirilmiştir. REST mimarisinde, 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 URI ‘ler ile web servise HTTP protokolüyle istek yapılır. Böylece REST için WSDL gibi bir tanımlama diline ihtiyaç kalmaz. İşlemler tamamen HTTP metodları üzerinden yapılır. Örneğin, bir web servisin metodunu SOAP ile “getUnitName” şeklinde çağırırken REST ile “/units/name/1″ URI’si ile çağırabiliriz. Ayrıca REST’in 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.
REST ile HTTP metod çağrı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.

REST Requesti Sonucu, Çoğunlukla Dönen HTTP Status Kodları:
200 OK: Genelde veri listeleme sonuçları 200 ile dönüş yapılır.
201 CREATED: Veri eklendiği zaman verinin kendisi ile 201 dönülür.
204 NO CONTENT: Veri silindiği zaman 204 dönülür.
400 BAD REQUEST: Genel olarak kayıt ekleme ya da güncelleme isteklerinde gönderilen veri validasyondan geçemediyse neden geçemediği hakkında bilgiyle beraber 400 HTTP Statusuyla dönülür.
403 Forbidden: Yetkiye dayalı bir işlem yapılıyorsa bu API uç noktasında işlem yapmaya çalışan kişinin bu işlemi yapmaya yetkisi yoksa 403 status kodu döner.
401 Unauthorized: Api ucunuzda bu işlemi yapmak için login olmak zorunlu ise ve API’ye istek yapan kullanıcı login değilse bu HTTP Status ile cevap verilir.
404 Not Found: Bu HTTP Status,  kullanıcının istek yaptığı URL yok ise ya da URL deki veri geçersiz ise bu hatayı alırız.
405 Method Not Allowed: Bu HTTP Statusu istek yapılan API uç noktası gönderilen metodu implemente etmemiş ise bu HTTP Statusunu alırız. Örneğin login olması için token verdiğimiz bir API ucumuz var ve bu uçta sadece POST isteğini kabul ediyor. Kullanıcı bu API URL’ine GET isteği yaparsa 405 statusu döner.
429 Too Many Requests: Bu HTTP Statusunu, saatlik ya da dakikalık kısıtlanan sınırdan fazla istek yapıldığında alırız. 

Gruplanmış Bakış Açısıyla HTTP Statusları;
Bilgilendirme
 – 1xx
Başarılı İşlem – 2xx
Yönlendirmek – 3xx
Kullanıcı Taraflı hata – 4xx
Server Taraflı hata – 5xx      
Şeklinde ifade edebiliriz.

Örnek REST Requestleri;
GET /tickets – Ticket Listesi
GET /tickets/12 – Ticket Detayı
POST /tickets – Yeni Ticket Ekleme
PUT /tickets/12 – Ticket Güncelleme
PATCH /tickets/12 – Ticketin bir kısmını güncelleme
DELETE /tickets/12 – Ticket Silme
GET /tickets/12/messages  12 id li ticket e bağlı mesajlar listesi
GET /tickets/12/messages/5  5 id li mesajın detayı
POST /tickets/12/messages  12 id li ticket e mesaj ekleme
PUT /tickets/12/messages/5  Mesaj güncelleme
PATCH /tickets/12/messages/5  Mesajın belli bir kısmını güncelleme
DELETE /tickets/12/messages/5 –5 id li mesajı silme
GET /tickets?sort=-created_at&page=1 – Ticketları Eklenme tarihini büyükten küçüge sıralama işlemi ve birinci sayfa verisini getir
GET /tickets?type=1&sort=-created_at – Ticketları Eklenme tarihini büyükten küçüğe sıralama işlemi ve tipi 1 olan ticketlar
GET /tickets?fields=id,subject,customer_name,updated_at&type=1&sort=-updated_at – Sadece belli fiedleri ve tipi 1 olan son güncelleme tarihine göre büyükten küçüğe sıralama

REST ile SOAP Arasındaki Farklar;
  • 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. Yani REST’de gelen, giden data boyutu SOAP ile karşılaştırıldığında çok ufaktır diyebiliriz.
  • Ayrıca SOAP için WSDL ile tanımlama yapmak gerekirken REST için böyle bir zorunluluk yoktur. (WADL<Web Application Description Language> 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 Tool‘a ihtiyaç duyulmadan görülebilir. SOAP için hata ayıklama araçları gerekebilir.
  • REST basit HTTP GET metodunu kullandığı için Cache leme işlemi daha kolaydır. SOAP ile Cache leme 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.
  • Verimlilik, ölçeklenebilirlik ve kullanıcı tarafından algılanan performans açılarından bakıldığında REST , SOAP ‘tan daha iyidir ve tercih edilir.
Kaynaklar :

Hiç yorum yok :

Yorum Gönder