Representational State Transfer (REST)
Tunahan Erken - 2023/08/04
REST, RESTful, RESTAPI, RESTful API ve sanki sonsuza kadar devam edecekmiş gibi olan 3 kelimenin sürekli yer değiştirmesiyle oluşan kavramlar. Gelin hep birlikte REST neymiş, tüm bu kelimelerin anlamları neyi ifade edermiş anlayalım.
REST teriminin ilk kez 2000 yılında Bilim İnsanı Roy T. Fielding tarafından Architectural Styles and the Design of Network-based Software Architectures (Mimari Stiller ve Ağ Tabanlı Yazılım Mimarilerinin Tasarımı) isimli doktora tezinde bir bölüm olarak yer almıştır. Kimdir bu kişi derseniz 1993’ten beri World Wide Web projesinde bulunan, 1994’ten beri ise Internet Engineering Task Force (IETS) bünyesinde URI, HTTP ve HTML çalışma gruplarında bulunan meslek büyüğümüz olarak bahsedebilirim. Bunlardan bahsetmemdeki amaç, REST’in bir yönelim veya tarz’dan çok daha fazlası olduğunu belirtmek istememdi.
Starting with the Null Style
REST, kavram olarak boş bir kısıtlama kümesi olarak düşünebiliriz. Yazılım mimarimizde bulunan unsurlar arasında ayırt edici bir sınırlandırma olmadığı bir sistemi tanımlar. Yazılım tasarımını kurgularken herhangi bir kısıtlama olmaksızın tüm sistem gereksinimleri ile başlayıp ardından tasarımı farklılaştırmak ve etkileyen birimlerin kurguyla uyum içerisinde aşamalı olarak kısıtlayarak uygulanması REST mimarinin temel özüdür.
Client-Server
İstemci(Uygulamamızın kullanıcı tarafından çalıştığı ortam) ve sunucu(Uygulamanın çalıştığı ortam) arasındaki sorumlulukların ayrılmasını savunur. Buradaki temel unsur ise Front-End ve Back-End operasyonlarında Front-End'e Back-End'in operasyonel sorumluluklarından arındırarak kullanıcı tarafında platform bağımsız çalışabilir hale gelmesidir. Ayrıca bu ayrım ile birlikte birbirlerinden bağımsız olarak gelişmesine izin verilmektedir.
Stateless
İlk maddede bahsettiğimiz kısıtlamaya ilk vereceğimiz örnek bu olacak. Client-Server arasındaki iletişime bir kısıtlama ekliyoruz. Client yani isteği yapacak olan kısım Server’ın istediği tüm şartları sağlamalıdır. Ek olarak Server’ın ise Client hakkında herhangi bir bilgisinin bulunmayacağı anlamına gelir. Örnek olarak isteği yapan Client’ın daha önce hangi istekleri yaptı gibi bilgiler tutulmaz. Bunun nedeni, Client tarafından gelen isteğin sunucuda depolanan herhangi bir bağlamdan yararlanmayacağı ilkesinden dolayı oturum bilgileri gibi veriler Client tarafında tutulur.
Cache
Ardından ikinci kısıtlama olarak Cache kısıtlamasını ekliyoruz. Cache kısıtlaması Server’a gelen bir isteğe verilen yanıt içindeki verileri cacheable ya da non-cacheable olarak tutabilmemizi sağlar. Yanıt içindeki veriler cache’e alınabilirse, farklı Client’lardan gelen benzer istekler cache alanından yeniden kullanılabilir hale gelecektir.
Uniform Interface
Server ve Client’lar arasındaki standart ve tutarlı bir arabirime sahip olması gerektiğini vurgular.
Layered System
Client, Server’a bir istekte bulunduğunda Server bu istek doğrultusunda başka Server’lara da aktarabildiği gibi kendi içerisinde güvenlik, uygulama gibi birden çok katmanı barındırabilecek bir yapıda şeklinde kurgulanabilir. Oluşturulabilecek tüm katmanlardan ise Client’ın herhangi bir bilgisi olmayacaktır.
Yukarıda sıralanan tüm bu kısıtlamalar veya ilkelere bağlı kalınarak geliştirilen API’lere ise REST API veya RESTful API olarak isimlendirilir.
Kurguladığımız bu yapı nasıl çalışacak ve hangi yöntem ile çalışacak sorularına yanıt arayalım. Öncelikle Client herhangi bir bilgi elde edebilmek için RESTful API’de tanımlanan URI’ye HTTP protokolüyle Server ile irtibata geçer. Server, Client’tan gelen isteği alır ve işler. Ardından işlediği veriyi Client’a yanıt verir. Konunun daha iyi anlaşılabilmesi amacıyla son olarak Client’tan Server’a bahsettiğimiz isteği de detaylandırarak yazımızı sonlandıralım.
RESTful API’nin Client’tan Server’a Göndereceği/İleteceği Request(İstek) Detayları
Http metodu,
a. Get, cRud metodudur. İstek doğrultusunda Server tarafından veri okur.
b. Post, Crud metodudur. İstek doğrultusunda Server tarafında veri oluşturur.
c. Put veya Patch, crUd metodudur. İstek doğrultusunda Server tarafında veri günceller.
d. Delete metodu, cruD metodudur. İstek doğrultusunda Server tarafında veri siler.
Http header, kimlik/oturum doğrulama gibi gereksinimleri barındırır.
Body, verilerin tutulduğu ve gönderildiği alandır.
Last updated