REST Mimarisi

Representational State Transfer (REST) popüler bir web servis protokolu olan SOAP’a karşı basit bir alternatif olarak son zamanlarda popülerlik kazanmıştır.

Bazı Kavramlar

REST protokolüne hemen geçmeden önce konuya aşina olmayanlar için bazı kavramları kısaca açıklamak gerekiyor. RPC (Remote Procedure Call) çalışma anında alt yordam ya da işemri üreten bir bilgisayar programının başka bir adres uzayındaki bilgisayara (genellikle ortak ağdaki farklı bir bilgisayar) bu işemirlerini havale etmesidir. Bu durumda programcının karşı taraftaki kaynak kodu bilmesine gerek yoktur.

RPC’de haberleşme istemci tarafından başlatılır. İstemci adresi önceden bilenen uzaktaki bir sunucuya kendisine ait bir altyordamı yapması için gerekli parametreleri de içeren bir istek mesajı gönderir. Devamında sunucu istemciye bir yanıt döndürür, bir yandan da onun isteğini yerine getirmek için süreci başlatır. Bu arada sunucu süreç bitene kadar istemciyi bloke eder yani bekletir. Prensipte RPC bu şekilde iki cihaz arasında bir işemrini yerine getirmek için haberleşmeyi sağlar.

Web servis kavramı da aslında web-tabanlı RPC’ler için tanımlanmış genel bir addır. Örneğin SOAP web-tabanlı, veri transferi için XML kullanan bir RPC protkolüdür. SOAP ya da genellersek web-tabanlı RPC’ler mesaj iletimi için çoğunlukla bir başka OSI Katman 7 protokolü olan HTTP’yi veya bazen SMTP’yi kullanırlar. Bir nevi OSI Katman 7 protokolüne bağlı yeni bir Katman 7 yani uygulama protokolüdürler.

Kavramların daha iyi anlaşılması için bir analoji yapalım. HTTP ile web-tabanlı RPC’yi birbirine karıştırmamak için en temelde şunu söyleyebiliriz; HTTP daha çok insan-sunucu etkileşimi için tasarlanmış bir protokolken, RPC’ler daha çok sunucu-sunucu etkileşimi için tasarlanmışlardır. Web-tabanlı RPC ise sunucu sunucu arasındaki mesajlaşmayı mevcut olan HTTP ya da STMP protokollerini kullanarak yaparlar.

Şimdi örneği biraz daha geliştirelim. Bir sunucunun hem HTTP’yi hem de web-tabanlı bir RPC protokolünü desteklediğini varsayalım. İstemci bir insan olduğunda talep gerekli parametrelerle HTTP üzerinden yapılır ve arkada örneğin veritabanında bir sorgu çalıştırılıp bunun sonucu görsel olarak (grafik, yorum vs) yine HTTP üzerinden istemci olan insana gönderilir. Eğer istemci bir başka bilgisayar ise bu sefer onun ihtiyaç duyduğu bir alt yordam için yine aynı sorgu veritabanında çalıştırılıp çıktı belli bir formatta (XML kullanılabilir) diğer cihaza text olarak iletilir.

REST ile RESTful Arasındaki Fark

REST aslında bir yazılım mimarisidir. Roy Fielding’in tezinde de belirttiği gibi REST mevcut olan teknoloji ve Web protokollerini kullanan yazılımsal bir mimari stilidir. RESTful ise bu mimari üzerine kurulu bir Web servis uygulamasıdır. Bir nevi REST işin felsefe kısmıyken RESTful onun uygulamasıdır gibi de düşünülebilir.

RESTful

REST’in uygulama katmanı için tasarlanmış bir mimari stil olduğunu daha önce de söylemiştik. REST protokolü CORBA, RPC veya SOAP gibi daha karmaşık mekanizmalar kullanmak yerine makinaları birbirine bağlamak için daha basit olan HTTP protokolünü kullanma fikrinden ortaya çıkmıştır. REST veri göndermek, okumak, güncellemek ya da yazmak için HTTP isteklerini kullanır. Bahsi geçen diğer protokollere göre daha basittir fakat birçok özelliğe de sahiptir. Diğer Web servislerde yapılıp da RESTful’da yapılamayan birşey yoktur.

– Sunucuda bir kaynak oluşturmak için POST methodu kullanılır
– Bir kaynağa ulaşmak için GET kullanılır
– Kaynağı durumunu değiştirmek veya güncelemek için PUT methodu kullanılır
– Silmek içinse DELETE kullanılır

REST bir standart değildir. Bu sebeple hiçbir zaman REST için bir W3C tavsiyesi olmayacaktır. REST için birçok framework mevcuttur, bu sebeple onunla çalışmak kolaydır. Perl, Java, C#, PHP gibi dillerdeki kütüphane özellikleriyle istediğinizi yapabilirsiniz.

Bir REST servisi :

– Platformdan bağımsızdır (Unix, Mac veya Windows olması değişmez)
– Programlama dilinden bağımsızdır
– Standart temellidir (HTTP üzerinden çalışır)
– Güvenlik duvarı (firewall) olsa da kullanılabilir

Diğer Web servisler gibi REST bünyesinde bir güvenlik özelliği taşımaz. Şifreleme, oturum yönetimi veya QoS garantisi yoktur. Fakat bu tarz şeyler HTTP üzerinden sağlanabilir:

– Güvenlik için kullanı adı/şifre yöntemi kullanılabilir
– Şifreleme için REST HTTPS üzerinden çalıştırılabilir

REST mimarisinde olmayan şeylerden birisi de çerezlerdir (cookie). REST’teki tüm operasyonlar kendi dahillerinde gerçekleştirilirler yani her istek mesajı sunucunun görevi tamamlaması için ihtiyaç duyduğu tüm bilgiyi (state) mesajı kendi içinde taşır. Dolayısıyla her mesaj birbirinden ayrıktır, aralarında bir ilişki yoktur. İstek gerekli tüm bilgilerle sunucuya iletilir, sunucu da isteğe göre cevabını üretip geri gönderir. Bu sebeple RESTful mimarisi stateless bir protokoldur.

REST nasıl bu kadar basittir?

Bunu basit bir örnek ile gösterebiliriz. Telefon rehberi uygulamasına bir kişinin bilgilerini öğrenmek için bir sorgu gönderelim. Tüm bildiğimiz de bu kişinin ID numarası olsun. Eğer SOAP kullanmış olsaydık istek aşağı yukarı şöyle birşey olacaktı:

<!--?xml version="1.0"?-->
 
 
 
12345

Tüm bunların hepsi (HTTP POST methodu kullanılarak) sunucuya gönderilecekti. Sonuç muhtemelen yine SOAP zarfının içine gömülü olan bir XML dosyası olacaktır.

Peki benzer bir sorgu REST ile nasıl olur? Sorgu muhtemelen şöyle olacaktı:

http://www.acme.com/phonebook/UserDetails/12345

Dikkat ederseniz bu bir istek paketi değil sadece bir URL’dir. Bu URL sunucuya basitçe GET isteği yapılarak gönderilmiştir ve HTTP cevabı birşeyin içine gömülü olarak değil ham veri olarak geri iletir. Böylelikle istemci direk veriyi alıp kullanabilir.

– Örneğe bakarak genellikle ilgili kütüphaneleri kullanan Web servisler için SOAP/HTTP istek oluşturup göndermenin ve sonrasında SOAP cevabını yorumlamanın ne kadar kolay olduğu anlamak mümkündür. Kolaydır ancak gidip gelen mesajlar üzerinde yorum yapabilmek için ilgili kütüphanelere ihtiyaç vardır.
– REST içinse sadece basit ağ bağlantısına gerek vardır. REST API’yi direkt tarayıcı ile bile denemek mümkündür. Aslında İnternet genel olarak REST mimarisi üzerine kurulmuştur diyebiliriz. Çoğu sunucu kendi arasında basit REST istek/cevapları üzerinden haberleşir. Hatta programcıların çoğu REST’i bilmeden o mantığı kullanarak makinalar arasında haberleşmeyi sağlamışlardır.
– Yine de REST için kütüphaneler (işleri basitleştirmek için) mevcuttur.

REST sunucu cevabı

Bir sunucunun REST ile gönderdiği cevap genellikle bir XML dosyası olur, örneğin

 
 
ACME Boomerang
 
Used by Coyote in <i>Zoom at the Top</i>, 1962
 
17.32
http://www.acme.com/parts/3322
 
 
ACME Dehydrated Boulders
 
Used by Coyote in <i>Scrambled Aches</i>, 1957
 
19.95
http://www.acme.com/parts/783

Bununla birlikte diğer formatlar da kullanılabilir, SOAP gibi XML’e bağımlı değildir. CSV (comma-separated values) ve JSON (JavaScript Object Notation) gibi veri değişim formatları da kullanılabilir.

Herbir format kendine has artılara ve eksilere sahiptir. XML formatında iletiyi genişletmek çok kolaydır (istemci kendisine yabancı olan gereksiz yerleri kolayca görmezlikten gelebilir). CSV daha kompaktır, JSON’ı ise yorumlamak çok kolaydır.

Kaynaklar

Bu yazı aşağıda kaynakları verilen yazılardan tercüme edilip yazar tarafından yorumlanarak yazılmıştır.

[1] http://www.ibm.com/developerworks/webservices/library/ws-restful/
[2] http://rest.elkstein.org/
[3] http://www.xfront.com/REST-Web-Services.html
[4] http://stackoverflow.com/questions/671118/what-exactly-is-restful-programming
[5] http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

KAYNAK : http://www.nestaelektronik.com/blog/index.php?article=restful

İlginize Çekebilir

NIST Cybersecurity White Paper : Internet of Things (IoT) Trust Concerns

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir