Photo by Alexandra Nicolae on Unsplash

REST Nedir ? (Richardson Maturity Model)

İnternet Ağ Kavramları yazımda REST konusundan biraz bahsetmiştim. Bu konuyu biraz daha detaylandırıp REST hangi seviyelerde kullanabileceğimizden bahsedeceğim.

REST(Representational State Transfer) adından da anlaşılacağı gibi uzak sistemdeki mantıksal kaynakları HTTP protokolü ile GET, POST, PUT, PATCH, DELETE methodlarını çağırarak kullanmaktır.

Roy Thomas Fielding tarafından 2000 yılında PhD olarak geliştirmiştir. Kendisi ayrıca HTTP spesifikasyonu ve HTTP Apache Server yazan ekibin içerisinde.

Resources(Kaynaklar nedir)? Sucucu veritabanında bulunan istemcinin ihtiyaç duyduğu;

  • Kullanıcı,
  • Grup,
  • Fatura,
  • Bilet,
  • Hesap vb objeleri

istemci üzerinden sorgulamasına değiştirmesine, erişmesine izin vereceğimiz kaynaklardır. Yani sunucuda veritabanında, dosyada vb yerlerde tutulan bu nesneleri istemcilerin erişerek yönetebildiği elemanlara resources(kaynak) diyoruz

Aşağıdaki örnekte olduğu gibi Ticket(bilet) kaynağına erişim yönetmek istiyoruz. Bunu REST ile nasıl yapacağız ?

  • GET/tickets (tüm biletleri getir)
  • GET/tickets/3 (3 nolu bileti getir)
  • POST/tickets (bilet oluştur)
  • PUT/tickets/3 (3 nolu bileti güncelle)
  • PATCH/tickets/3 (3 nolu bileti bir kısmını güncelle)
  • DELETE/tickets/3 (3 nolu bileti sil)

REST Kullanılmadan Sunucular Çalışır mı ?

Sunucular HTTP protokolünü bire bir REST yapısında resource(kaynak) şeklinde tasarlamadan da geliştirebilirler. Sunucu tarafında fonksiyon çağırımı yapacak şekilde bir tasarımla REST kullanmayan mekanizmalar tasarlanabilir. Örneğin REST olmadan Servlet’ler nasıl çalışır ?

web.xml içerisinde Servlet sınıfları ve bunların ismi bulunuyor. Siz istemcinizden bu path üzerinden POST/GET yaparak istek parametreleriyle geçerek Servlet’lerini yazıyorsunuz.

Her bir Controller için ayrı Servlet yazmak maliyetli olacağı için kendiniz bir DispatcherServlet yapıp

  • ilk parametresi cmd=operationType
  • ikinci parametreniz data=JSON .. olacak şekilde bir yapı kurup.

Tek bir servlet istekleri karşılayıp switch kontrolü yapıp ilgili fonksiyonu çağırıyorsunuz. İlgili fonksiyonu bulduktan sonra JSON parser’dan datayı geçirip mantıksal bir sınıfa eşleştirip bu sınıfı gelen bu veri ile dolduruyorsunuz. (Jakson, Gson) bunları ilgili Java Objelerine dönüştürmek için kullanılan kütüphanelerden bazıları.

Eğer geçirdiğiniz nesne

  • çok uzun parametrelerden oluşmuyor,
  • session tutmuyor,
  • cachelenebilir ise REST sizin için uygun bir yöntem olur. Bu sayede bir çok servlet oluşturmanıza veya DispatcherServlet gibi fonksiyonlar yazmanıza gerek kalmaz.

Glassfish, Weblogic, WebSphere, JBoss gibi Enterprise sunucular REST desteğini JAX-RS spesifikasyonu olarak sağlar. Tomcat ve Jetty gibi J2EE’nin sadece bazı yeteneklerini içeren Web Sunucuları, JAX-RS desteklemez. Bunlar dışarıdan Jersey,CFX gibi kütüphaneler kullanabilirsiniz. Veya Spring MVC kullanımı REST için bir tercih olabilir.

REST Kullanımı Olgunluk Modeli (Richardson Maturity Model)

Bu kısma kadar REST hakkında kısa bilgiler verdik. REST hangi seviyelerde kullandığımız ile Richardson bir olgunluk modeli oluşturmuştur. Acaba hangi seviyede bu REST’i kullanıyoruz.

Bu model 4 seviyeden oluşuyor. Level-0 REST en alt seviyede kullandığımızı gösteriyor. Level-3 REST tam anlamıyla kullanıp esnekliğinden faydalandığımız anlamına geliyor.

REST Model

Level-0 Swamp of POX

REST bir taşıma protokolü olarak değerlendirip kullanmaktır. Remote Procedure Call yaparak uzak sistemdeki bir metodu çağırmaktan farksızdır. Bu kullanım SOAP, XML-RPC benzer. Genel’de POST metodu ile çağrımlar gerçekleştirir.

Level — 0

Level-1 Resources

REST çağırma API’mizi URI’dan resource bazlı yapıyorsak yani bir context altına atıyor isek , Örneğin http://example.org/ticket/12 dediğimizde ticket resource altındaki 12 numaralı nesneye erişmek istediğimi direk URI üzerinden gerçekleştirmiş olurum. Genelde POST metodu ile çağrımlar gerçekleştirilir.

Level -1

Level-2 HTTP Verbs

Bu seviyede sadece POST ile URI’lar çağrılmaz. Bunun yanında PUT, DELETE, POST ve GET metodları çağrılır. Her birisi için ayrı URI’lar oluşturma ihtiyacı olmaz bu sayede..

Level -2

Level-3 HyperMedia Controls

Bu seviye kullanımda herhangi bir URI çağrıldığında cevabında bu resource ile yapabileceği işlemlerin URI olarak istemci’ye döndürülmesi. Bu sayede istemcinin ayrıyetten tüm URI ve yapacağı işlemleri sisteminde tutmasına gerek kalmaz. HATEOAS yönteminde istemci servis keşfini dönen cevap üzerinden yaparak işlemlerine devam edebilir.

Aşağıdaki örnekte Doktor MJones 2010/01/04 tarihindeki boş randevu durumları sorgulanmakta. Altında 2 açık randevu alanı olduğu gözüküyor. Aynı zamanda bu 2 randevu slot’unun içerisinde bu slot’ları reserv et link ve uri’larıda dönmüş durumda. İşlemci tarafında ekstre kod yazmadan sunucu ve onun verdiği URI cevaplar ile akışlarınızı yönetmek oldukça kolay olacaktır.

Level -3

REFERANSLAR

Okumaya Devam Et 😃

Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store