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.
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 – 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/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
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 :
- https://en.wikipedia.org/wiki/List_of_web_service_protocols
- http://www.obenplus.com/blog/rest-api-nedir-nasil-kullanilir/
- https://youtu.be/YCcAE2SCQ6k
- http://blog.matemata.com/soap-ile-rest-web-servislerin-farklari/#disqus_thread
- https://tr.wikipedia.org/wiki/REST
Hiç yorum yok :
Yorum Gönder