REST yapısı, ilk olarak 2000 yılında Roy Fielding tarafından doktora tezinde tanıtılmıştır. Ayrıca Roy Fielding, The Apache Software Foundation‘ın kurucularındandır.
REST, açılımı Representational State Transfer olan istemci-sunucu arasında hızlı ve kolay şekilde iletişim kurulmasını sağlayan HTTP protokolüne dayanan bir servis yapısıdır. Servis yönelimli mimari (SOA) üzerine oluşturulan yazılımlarda kullanılan bir veri transfer yöntemidir.
HTTP üzerinde çalışır ve diğer alternatiflere göre daha basittir, minimum içerikle veri alıp gönderdiği için de daha hızlıdır. İstemci ve sunucu arasında JSON, XML, HTML veya farklı formatlardaki verilerini taşıyarak uygulamaların haberleşmesini sağlar. REST standartlarına uygun yazılan web servislerine RESTful servisler denir.
REST tabanlı bir mimaride her şey bir kaynaktır. Kaynaklar global kimlikler (genellikle URI’lar) tarafından tanımlanır. GET, POST, PUT, DELETE vb. Gibi HTTP yöntemlerini kullanarak kaynakları okuma, yazma, değiştirme ve oluşturma olanağı sağlanır.
HTTP Metotları
RESTful web servislerinde kaynaklara ulaşmak için Uniform Resource Identifiers(URI) kullanılır. Bu kaynaklar üzerinde işlemlerde de HTTP methodları ile gerçekleştirilir. GET, PUT, POST, DELETE methodları web servis içinde clienttan gelen isteklerin serverda nasıl işleneceğini belirler. HTTP methodlarının bu şekilde kullanılması da web servisin platform bağımsız olarak kullanılmasına olanak verir.
RESTful servisler veri iletiminde farklı HTTP metotlarını kullanmaktadır. Bunlar ;
- GET okuma işlemidir,
- POST yeni bir kaynak oluşturur,
- PUT yeni bir kaynak oluşturur veya varolan kaynağı günceller,
- DELETE ise kayıt silme işlemi için kullanılır.
Yapılan HTTP request’i için çağrılan URL ile beraber HTTP method bilgisi bahsi geçen 4 metottan biri olarak seçilir ve sunucu yapılan talebin kayıt üzerine nasıl etki edeceğini buna göre belirler.
Yapısı
REST stateless‘dır, yani durum bilgisini saklamaz. REST, istemci-sunucu arasında taşınan verilerde ekstra başlık bilgileri saklanmaz, istemciye ait detaylar bulunmaz, bu bilgiler istemci-sunucu arasında taşınmaz. SOAP servisleri RPC(Remote Process Call yani uzaktaki bir prosedürün çağrılması) çalışma yöntemini kullanır, WS-* gibi güvenlik protokollerini içerisinde barındırır, state bilgisini request ve response’larda saklar. Ancak REST’te bu durum daha farklıdır. REST servisler doğrudan bir URL çağrılarak çalışır, arada ek bir bileşen, yöntem veya protokol kullanılmaz.
RESTful servislerin avantajları ; Basit yapısı, kolay uygulanması, hızlı çalışması, esnek olması… En önemli dezavantajlarından birisi ise Güvenlik. SOAP servislerde standartlar gereği birçok güvenlik mekanizması otomatik olarak elinizin altındadır. Ancak RESTful servislerde güvenlik konuları geliştirilen yazılımın bir parçasıdır. İletişim seviyesinde güvenlik(Transport level security) genellikle token aracılığıyla yapılır. İstemci kritik işlemleri çağırmadan önce bir login isteği gönderir. Bu istek sonucunda istemciye session token vb. bir değer verilir ve bundan sonra yapacağı istekler bu token değeri ile yapılır. Mesaj seviyesinde güvenlik(Message level security) konusu da yine geliştirilen yazılımların içerisinde çözüm bulunması gereken bir konudur. Tabii ki bazı üçüncü parti araçları kullanarak (Keycloak vb.) hem iletişim hem de mesaj seviyesinde güvenlik fonksiyonlarını yazılımlarınıza daha kolay şekilde uygulayabilirsiniz.
SOAP bir servisi uygulamanıza dahil edebilmeniz için servisin WSDL’ına ihtiyaç duyarsınız, proxy sınıfları oluşturmanız gerekir, uzaktaki metotları tetikleyecek bileşenlere ihtiyaç vardır. Yani özet olarak istemci, SOAP bir servisle ilgili herşeyi bilmek zorundadır, belirli standartları yerine getirilmeden SOAP bir servisi çağıramaz. Ancak REST ile yazılmış bir servisle çalışmak için ihtiyacınız olan tek şey URL. Bir URL’yi çağırırsınız, URL size JSON veya XML döndürür, dönen cevabı parse edersiniz ve servis entegrasyonunuz tamamlanır. Yani teorik olarak istemci uygulama REST bir servisin yapısını ve detaylarını bilmek zorunda değildir. REST’in bu basit standartları dışında uyulması gereken bir kural yoktur, son derece esnek bir yapı vardır.
Kaynaklar
- https://spring.io/guides/gs/rest-service/
- https://restfulapi.net/
- https://www.tutorialspoint.com/restful/restful_security.htm
- https://www.tutorialspoint.com/restful/restful_jax_rs.htm
- https://ruffledcrow.com/2012/03/06/http-status-cats/
Teşekkür ederim Emeğinize sağlık Sağ olun var lun