Günümüzde kullanılan yazılım sistemleri birçok gereksinim nedeniyle birbirleri ile iletişim kurmak ve aralarında çeşitli veri transferleri gerçekleştirmek durumundadır. Dağıtık sistemlerin artması ve sistemler arasında entegrasyonlara ihtiyaç duyulması “Web Servis” kavramını oluşturmuş ve gelişimine sebep olmuştur. Kısaca Web Servisler farklı yazılım sistemlerinin birbirleri ile konuşabilmesini sağlayan protokolleri/kuralları temsil eder ve bu protokolleri/kuralları sağlayan yazılımlar web servis yazılımları olarak adlandırılır.
REST, dağıtık mimari uygulamaları oluşturmak için geliştirilen veri transfer yönetimi ve kurallar bütünüdür. İsmi Representational State Transfer olan bu ifade Türkçe olarak “Temsili Durum Transferi” olarak geçer. HTTP üzerinde çalışır ve diğer alternatiflere göre daha yalındır. Temel içerik ile veri transferi gerçekleştirildiğinden hız açısından alternatiflerinden çok daha verimlidir. İstemci ve sunucu arasında XML veya JSON verilerini taşıyarak uygulamaların haberleşmesini sağlar. REST standartlarına uygun yazılan web servislerine RESTful servisler denir.
REST durum bilgisi barındırmaz. Sunucu üzerinde istemcilere ait durum veya içerik bilgisi bulunmaz, bir önceki istekleri ve durumları önemsizdir. Aynı adrese aynı parametreler ve aynı metotlar ile gelen tüm isteklere aynı yanıtın gönderilmesi amaçlanır. Bu uygulamaların daha esnek ve kolay olmasını sağlar. REST standartlarında istemci-sunucu arasında taşınan verilerde ek başlık bilgileri saklanmaz, istemciye ait detaylar bulunmaz, bu bilgiler istemci-sunucu arasında taşınmaz. Bu durum da beraberinde hız avantajını getirir. Dolayısıyla servis yönelimli uygulamalarda REST daha hafif ve esnek çözümler sunar. REST mimarideki Stateless kavramını kısaca bu şekilde tanımlayabiliriz.
REST servisler doğrudan bir URL çağrılarak çalışır ve kaynaklara (Resources) erişir. Arada ek bir bileşen, yöntem veya protokol kullanılmaz. SOAP gibi 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. İstemci, 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öner, dönen cevabı kullanırsınız ve servis entegrasyon 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.
RESTful servisler veri iletiminde farklı HTTP metotlarını kullanmaktadır. Bunlar GET, POST, PUT, DELETE metotlarıdır. GET okuma, POST yeni kayıt ekleme(insert), PUT kayıt güncelleme(Update), 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 metod 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.
Basit yapısı, kolay uygulanması, hızlı çalışması, esnek olması RESTful servislerin artı yönleridir. RESTful servislerinin bazı eksi yönleri de var bulunmaktadır. Güvenlik bunlardan biri olmakla beraber SOAP servislerde standartlar gereği birçok güvenlik mekanizması otomatik olarak oluşturulabilirken 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 “Giriş” isteği gönderir. Bu istek sonucunda istemciye “Sessin Token” vb. bir değer verilir ve bundan sonra yapacağı istekler bu değer ile yapılır. Mesaj seviyesinde güvenlik(Message Level Security) konusu da yine geliştirilen yazılımların içerisinde dikkat edilmesi gereken önemli bir konudur. Üçüncü parti araçlar kullanılarak hem iletişim hem de mesaj seviyesinde gerekli güvenlik fonksiyonları geliştirilen yazılımlara rahatlıkla uygulanabilir.