21 Haziran 2019 Cuma

REST mi? WEBSOCKET mi?

Rest vs Websockets


Bu yazımda istemci-sunucu iletişiminin temellerini inceleyeceğiz.Rest ve Websocket'i
projelerimizde kullanmak için hangisini ne zaman seçmemiz doğru olur bu konuda fikir edineceğiz.


Ağ iletişimi için oluşturulmuş OSI modeli bulunmaktadır.
Bu model 7 katmandan oluşmaktadır.
    1.Physical (Fiziksel Katman)
    2.Data Link (Veri Bağlantı Katmanı)
    3.Network (Ağ Katmanı)
    4.Transport (Taşıma Katmanı)
    5.Session (Oturum Katmanı)
    6.Presentation (Sunu Katmanı)
    7.Application (Uygulama Katmanı)

Uygulama katmanı son kullanıcıya en yakın olandır ve iletişime katılan uygulamalarla etkileşime girmekten sorumludur. FTP, SMTP, SNMP,HTTP ve WebSocket gibi bu katmanda kullanılan birkaç popüler protokol vardır.

WebSocket kalıcı bir TCP bağlantısı üzerinden çift yönlü, tam çift yönlü iletişimi sağlayan bir iletişim protokolüdür.WebSocket, 2011 yılında IETF tarafından RFC 6455 olarak bir iletişim protokolü olarak standartlaştırılmıştır. Günümüzde çoğu modern web tarayıcıları, WebSocket protokolünü desteklemektedir.

İnternetteki her yerde bulunmasından dolayı hepimiz HTTP'nin farkında olsak da, aynı zamanda bir uygulama katmanı iletişim protokolüdür. HTTP, istek yanıtına dayalı bir protokoldür.
REST (Temsili Durum Aktarımı), web hizmetleri oluşturmak için HTTP'ye bir dizi kısıtlama getiren mimari bir stildir.

WebSocket, istemci ve sunucu arasında iki yönlü iletişim için bir protokol tanımlarken, değiş tokuş edilecek mesaja herhangi bir koşul getirmez. Bu, iletişimdeki tarafların alt protokol müzakeresinin bir parçası olarak kabul etmeleri için açık bırakılmıştır.Önemsiz uygulamalar için bir alt protokol geliştirmek uygun değildir. Neyse ki, STOMP gibi kullanıma hazır birçok popüler alt protokol var.
STOMP, Basit Metin Yönelimli Mesajlaşma Protokolü anlamına gelir ve WebSocket üzerinden çalışır.

HTTP ve WebSocket'ı, her ikisi de uygulama katmanı protokolleri olduğu gibi doğrudan karşılaştırabilsek de, REST'i WebSocket ile karşılaştırmanın doğal olmadığını unutmayın.Daha önce gördüğümüz gibi REST, iletişim için HTTP'yi kullanan mimari bir stildir.Dolayısıyla, WebSocket ile karşılaştırmamız çoğunlukla HTTP'deki yetenekler veya eksiklikler ile ilgili olacaktır.

Handshake (El sıkışma), iletişim kuran taraflar arasında otomatik olarak iletişim protokolü müzakere yöntemini ifade eder. HTTP, durumsuz bir protokoldür ve bir istek-yanıt mekanizmasında çalışır. Her HTTP isteğinde, sunucuyla soket üzerinden bir TCP bağlantısı kurulur.İstemci daha sonra sunucu kaynakla veya bir hatayla yanıt verene kadar bekler. İstemciden gelen sonraki istek, önceki istek hiç olmamış gibi tekrar eder.

WebSocket, HTTP ile karşılaştırıldığında çok farklı çalışır ve gerçek iletişimden önce bir Handshake
(el sıkışma) ile başlar.WebSocket durumunda, istemci HTTP'de bir Protokol Handshake(El Sıkışma) isteği başlatır ve ardından sunucu HTTP'den WebSocket'a yükseltme kabul etmeye yanıt verene kadar bekler.Tabi ki, Protokol Handshake( El Sıkışma) HTTP üzerinden gerçekleştiğinden, önceki şemadan gelen sırayı izler. Ancak bağlantı kurulduktan sonra, oradan istemci ve sunucu daha fazla iletişim için WebSocket'e geçer.

WebSocket ve HTTP arasındaki temel fark, WebSocket’ın kalıcı bir TCP bağlantısı üzerinde çalışırken, HTTP her istek için yeni bir TCP bağlantısı oluşturmasıdır.Şimdi açıkçası, her istek için yeni TCP bağlantısı oluşturmak çok başarılı değil ve HTTP bunun farkında değil. Aslında, HTTP / 1.1'in bir parçası olarak, HTTP'nin bu eksikliğini gidermek için kalıcı bağlantılar tanıtıldı.
Bununla birlikte, WebSocket, kalıcı TCP bağlantılarıyla çalışmak için sıfırdan tasarlanmıştır.

Kalıcı TCP iletişimi üzerinde çalışan WebSocket ile, hem sunucu hem de istemcinin birbirinden bağımsız ve aslında birçok iletişim kurucu tarafa veri göndermesi mümkündür.Buna iki yönlü iletişim denir.

WebSocket iletişiminin bir başka ilginç özelliği de tam çift yönlü olmasıdır. Şimdi bu terim ilginç gelebilirken; bu sadece sunucunun ve istemcinin aynı anda veri gönderebileceği anlamına gelir.Bunu, sunucunun verileri yanıtlayabilmesi için isteği tam olarak alana kadar beklemesi gereken HTTP'de olanlarla karşılaştırın.

Hem HTTP hem de WebSocket, TLS'nin güvenlik avantajlarından yararlanır. HTTP, bunu kullanmak için URL şemalarının bir parçası olarak https sunarken, WebSocket, aynı etki için URL şemalarının bir parçası olarak wss'ye sahiptir.Bir RESTful servisini veya bir WebSocket iletişimini güvenceye almak çok derin bir konudur ve burada ele alınamaz. Şimdilik, her ikisinin de bu konuda yeterince desteklendiğini varsayalım.

Sonuç

WebSocket’ın HTTP’deki eksikliklerden ortaya çıkmasına rağmen, aslında bir HTTP’nin yerine geçmediğini unutmamak önemlidir. Bu yüzden ikisinin de yeri ve kullanımları var. Nasıl karar verebileceğimizi  anlayalım.

Bir çalışanın kaydını almak gibi sunucu ile zaman zaman iletişimin gerekli olduğu senaryoların çoğu için, HTTP / S üzerinden REST hizmetini kullanmak hala mantıklı. Ancak, sunucudan gerçek zamanlı güncellemeler gerektiren bir hisse senedi fiyatı uygulaması gibi daha yeni istemci tarafı uygulamalar için WebSocket’tan yararlanmak çok kolaydır.

Genelleme, WebSocket, push tabanlı ve gerçek zamanlı iletişimin gereksinimi daha uygun şekilde tanımladığı durumlar için daha uygundur. Ek olarak, WebSocket, bir mesajın aynı anda birden fazla müşteriye gönderilmesi gereken senaryolar için iyi çalışır. Bunlar, RESTful hizmetleri üzerinden istemci ve sunucu iletişiminin yasaklayıcı olmasa zor geleceği durumlardır.


Alıntı