Dev Arksoft
  • Arksoft Developer Network
  • Ağustos 2023
    • Angularda DOM (Document Object Model) Manipülasyonu
    • Angular’da Routing
    • Representational State Transfer (REST)
    • .Net Framework için Local NugetPackage
    • Agile Nedir?
  • Temmuz 2023
    • Angular HTTP Interceptors
    • Angularda Promise ve Observable
    • Mongo DB Kullanımı
  • Haziran 2023
    • Angular Validators
  • Mayıs 2023
    • Docker Uzerine Redis Kurulumu ve .Net Core ile Redise Erişim
  • Nisan 2023
    • Angular 14 Componentler Arası İletişim
  • Şubat 2023
    • JMeter ile Performans Testi
  • Ocak 2023
    • Windows Giriş Ekranında C# Form Açmak
  • Temmuz 2022
    • Regular Expressions
  • Haziran 2022
    • RSA Şifreleme
    • AutoMapper Kullanımı
    • Permutasyon ve Kombinasyon
    • Generic Repository Pattern
    • Levenshtein Algoritması
    • HTML 5’e Giriş
    • Graph Yapılar
  • Mayıs 2022
    • IQueryable IEnumerable Farklar
    • Sıralama Algoritmaları
  • Şubat 2022
    • ADFS Custom 2FA Integration
    • Reacta Giriş ve Reactın Temel Prensipleri
    • TypeScript Kullanımı
    • Serialization Kullanımı
    • Log4Net Kullanımı
    • Collections Yapıları
    • Windows Service Projesini Debug Etme ve Harici Exe Çalıştırma
    • Culture ve DateTime Kullanımı
    • Reflection Kullanımı
    • Steganografi Teknikleri
    • ElasticSearch Kullanımı
    • SWAGGER ve JWT TOKEN BASED WEBAPI Kullanımı
    • LINQ Komutları Kullanımı
    • Image Processing İşlemleri Kullanımı
Powered by GitBook
On this page
  • Starting with the Null Style
  • Client-Server
  • Stateless
  • Cache
  • Uniform Interface
  • Layered System
  1. Ağustos 2023

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ı

  1. Endpoint URL, Örnek verecek olursak API’mizde şehrin plaka kodunu gönderdiğimizde anlık sıcaklık değerini dönen bir metodumuzun olduğunu varsayarak http://restfulapi/weather/weatherbycity/06 şeklinde URI’sine isteği atmamız yeterli olacaktır.

  2. 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.

  3. Http header, kimlik/oturum doğrulama gibi gereksinimleri barındırır.

  4. Body, verilerin tutulduğu ve gönderildiği alandır.

Yazının bu kısmına kadar geldiğiniz için teşekkürler. Umarım okumanızdan fayda elde etmişsinizdir. Yazmamı istediğiniz konuları tunahan.erken@arksoft.com.tr mail adresime iletebilirsiniz.

PreviousAngular’da RoutingNext.Net Framework için Local NugetPackage

Last updated 1 year ago