Rest ve Restful Servisler

 

REST Nedir ?

Representational State Transfer yani kısaca REST dağıtık mimariler tasarlamak için kullanılan bir mimaridir. REST client-server arasında HTTP protokolü üzerinde çalışan haberleşmeyi sağlayan bir mimaridir. Son yıllarda servis yönelimli mimariler de client - server arasında XML ve JSON formatında verileri taşıyarak uygulamanın haberleşmesini sağlamak için kullanılır. Platform bağımsızdır yani client Windows, server Linux olabilir. Platform bağımsızlığının yanı sıra dil bağımsızlığı da sunar. Bu mimariyi kullanan servislere ise Restful servisler denir.

Rest ve Soap Arasındaki Farklar Nelerdir ?

Kısaca SOAP'ı açıklarsak en temel anlamda küçük verileri veya mesajları aktarma protokolüdür. Mesajları XML formatında aktarır ve genellikle HTTP protokolü ile bunları gönderir. Sadece XML kullanmayı zorunlu kıldığından esnek bir yapıda değildir.

SOAP üzerinde güvenlik kolay ve hızlı bir şekilde sağlanabilirken REST tarafında biraz daha karmaşık hal alabilmektedir. REST güvenlik konusunda SOAP mimariye göre zayıf kalmaktadır.
 
REST mimarisi JSON, XML, CVS, TEXT gibi formatlarda çalışmaya olanak sağlarken, SOAP ise sadece XML kullanımı ile  kullanıcıyı sınırlamaktadır. Veri boyutları uygulama için bir önem teşkil ediyorsa JSON ile küçük boyutlardaki verilerle işlem yapabildiğimiz için REST kullanımı oldukça yararlı olacaktır.

SOAP için geliştirici araçları ve güvenlik araçları oldukça fazladır. REST'e göre daha iyi bir dökümantasyon yapısı vardır.

Kısaca arasındaki farklar genel olarak bu şekildedir fakat SOAP ile yapılıp REST ile yapılamayan hiçbir şey olmadığı için REST'in SOAP'a göre üstün olduğu tarafların avantajları ile REST kullanımı oldukça popülerdir.


REST Mimarisi Prensipleri

Client - Server Mimarisi

Client server tarafındaki veri kaynağını hakkında bilgi sahibi değildir, server da doğru istekler geldiği sürece doğru yanıtları verir. Bunun sayesinde platform bağımısz çalışma sağlanır.

Stateless

Server tarafında Client'a ait bir context veya session tutulmaz. Client tarafında yapılan her istek server'ın gerekli cevabı verebilmesi için bilgileri taşır yani her türlü state client tarafında tutulur ihtiyaç halinde server'a iletilir. Client bu durumda her isteğe gerekli bilgileri eklemek zorundadır ve bu network trafiğini arttıracaktır. Birçok client'dan farklı içerikli requestler geleceğinden de validasyon zorlaşacaktır.

Cacheable

HTTP response'lar client tarafında cachelenebilir. Server bu durumda responseların cache olup olmayacağını belirlemelidr.

Uniform Interface

Client - Server arasında ortak bir arayüzün olması iletişimi basitleştirip her parçanın bağımsız bir şekilde evrimleşmesine olanak sağlıyor.

Uniform Interface aşağıdaki dört prensip ile çalışır.
  • Her istekte bir resource identifier kullanılır ve bunu da URI sağlar.
  • Gelen response kendine ait tanımlayıcı bilgiler bulundurmalıdır. Örnek olarak gelen response'un hangi formatta geldiğini söylerek client'a kullanacağı parser için bilgi verir.
  • Client isteği dört farklı yolla iletebilir. Bunlar body, querystring, header ve URI'dir. Server ise üç farklı şekilde cevap yollar, bunlar response, response code ve response header'dır.
  • Client işlem yapacak akdar bilgiye sahip olmalıdır.

Layered System

Client hangi ser'a bağlandığını bilmediğinden yani ara bir server mı yoksa son server mı bağlandığını bilmediği için katmanlı çalışmaya olanak sağlıyor. Bu sayede ara server'lar ile load balancing, client'ları belli security policy'lere mecbur tutma gibi işlemler yapabiliyoruz.

URI

RESTful servisler de adresleme işlemleri için URI'ları kullanırız. URI client'ın ulaşmak istediği bir response içeriğini bir dizi kurala uyarak bir link ile gösterir.

Örnek

exampleapi.com/api/user/123

HTTP Metotları ve REST


GET

Verileri listelemek veya görüntülemek için kullanılır. GET requestleri güvenli bir şekilde olmalı ve en önemlisi idempotent olmalıdır. Ne demek bu. Aynı parametlerle kaç kez tekrar etiiğne bakmadan aynı sonuçları vermesi demektir.

POST

Verileri eklemek için kullanılır. Veriler doğrudan sayfaya gönderilir.

PUT

Verilerin güncellenmesi için kullanılır. PUT metodu da GET gibi idempoten'dir. Yani bir request kaç defa tekralanırsa tekrarlansın sonuç her zaman aynıdır.

DELETE

Verileri silmek için kullanılır.

Yorumlar