ÇSTech
Published in

ÇSTech

REST Mimarisi ve HTTP Yüklemleri

Yapışkan not kağıtlarla Http yüklemlerini öğrenelim

You can access the English version via this link.

REST mimarisi ve REST mimarisinin kuralları hakkında daha önce bir yazı yazmıştım. Bu yazımda REST mimarisine göre geliştirilmiş web servislerinde en çok karşılaşılan HTTP yüklemleri ve hangi durumlarda kullanılacağı konusu üzerinde duracağım.

Photo by Kelly Sikkema on Unsplash

Daha önceki yazımda bahsettiğim gibi REST mimarisinde kaynak (resource) önemli bir kavramdır. Kaynaklar isimlerle (noun) temsil edilmektedir. Kaynaklara erişim için http(s)://host/resources şeklinde, kaynağın adının geçtiği hizmet noktalarını (endpoint) kullanmaktayız. Hizmet sağlayıcı (server) kaynakta yürütmek istediğimiz operasyonları (örneğin kayıt üretmek, kayıt okumak, kayıt silmek veya kayıt güncellemek gibi) HTTP yüklemleri aracılığı ile öğrenmektedir.

REST mimarisine göre bir servis yazarken veya REST mimarisine göre hazırlanmış bir servisten hizmet alırken en sık kullanılan POST, GET, PATCH, PUT, DELETE yüklemlerinin anlamlarından bahsedeceğim.

Yapılacak işlerinizi küçük kağıtlara yazarak duvarınıza astığınızı düşünün. Yüklemleri işte bu örnek uzay üzerinden açıklamaya çalışacağım.

POST

POST yüklemi kaynak içerisinde yeni bir kayıt oluşturmak için kullanılmaktadır.

Odanızda oturuyordunuz. Anneniz geldi ve marketten süt almanızı istedi. Bu durumda artık yeni bir göreviniz vardır. Bir kağıt alır ve üzerine görevinizi yazarak görev listenize eklersiniz.

GET

GET yüklemi kaynak içerisinde herhangi bir değişikliğe sebep olmadan bilgiye erişmek için kullanılır.

Yeni görevler geldikçe kağıtlara yazıp duvarınıza astınız. Şimdi sıra yapılacaklar listenizi gözden geçirmeye geldi. Anneniz geldi ve yapmaya söz verdiğiniz üç numaralı göreviniz hakkında bilgi istedi. Kimlik bilgisi ile kaynaktaki verileri sorgulamak için genellikle http(s)://host/resource/identifier şeklinde hiyerarşik bir yol takip edilir.

Bir de babanızın gelip tamamlanmamış işlerinizi sorduğu senaryoyu düşünelim. Bu durumda bir önceki senaryodaki gibi bilgiyi talep etmekten ziyade kriterlere uygun görevlerin neler olduğuna dair bir soru vardır. Bu kriterler de sorgulama parametreleri (query-parameters) olarak hizmet noktasındaki yerini alır.

PATCH

PATCH yüklemi kaynak içerisinde var olan kayıt üzerinde kısmi değişiklikler yapmak için kullanılmaktadır.

Babanızın size verdiği görevi tamamladığınızı düşünün. Bu durumda yapmanız gereken tek şey görev kağıdının üzerinde yer alan “Tamamlandı” durumunu güncellemek olacaktır.

PUT

PUT yüklemi kaynak içerisinde yeni bir kayıt oluşturmak, eğer kriterlere uyan bir kayıt varsa da güncellemek için kullanılmaktadır.

Anneniz geldi ve size markete gitmenizi, bunu yarına kadar yapmanızı, 2 şişe süt ve 10 tane yumurta almanızı istedi. Bu durumda yeni görev kağıdını eski görev kağıdının yerine koyarsınız ve görevi son haliyle yerine getirmeye çalışırsınız.

PATCH ile PUT arasındaki en temel fark şu şekilde özetleyebiliriz: birisi odaklanılan kaynakta yer alan kaydın bir kısmını değiştirirken diğeri kayıtta yer alan tüm alanları yeniden oluşturur.

Bir başka senaryo ile bu yüklemi açıklamaya devam edelim. Anneniz odanıza tekrar geldi. Alışveriş listesini değiştirdiğini bu sebeple yeni bir liste getirdiğini belirtti. Kağıtta yer alan “Alt Görevler” kısmını bir alt kaynak (subresource) olarak gördüğümüz senaryoyu ele alalım. Yeni alışveriş listesini eski alışveriş listesinin üstüne yapıştırmak da PUT yüklemi ile yapacağımız bir eylemdir. Bunun sebebi bir kaynağa ait veriyi tamamen yeniden şekillendiriyor oluşumuzdur.

PUT yüklemi yerine GET yüklemini kullanarak “https://host/ademcatamak/gorevler/3/alt-gorevler” hizmet noktasına istek attığımızı düşünelim. Bu istek sonucu elde ettiğimiz verilerin tamamı üzerinde bir değişiklik yürütüyor olacağız. Bu sebeple görev kağıdı üzerinde kısmi bir değişiklik yapsak da odak alanımızın tamamını değiştirmiş olduğumuz için Patch yerine PUT yüklemini seçmeliyiz.

DELETE

Delete yüklemi kaynak içerisinde var olan kaydı silmek için kullanılır.

Kardeşinizin markete gidip annenizin listesini aldığı durumu hayal edelim. Anneniz gelip artık markete gitmenize gerek kalmadığını söyleyecektir. Bu durumda artık görevinizi ortadan kaldırabilirsiniz. İsterseniz kağıdı yırtıp atın (hard delete) isterseniz de kağıdın üzerine bir çarpı koyun (soft delete). Birisi size görevlerinizi sorduğu zaman bu kaydı görmezden geldiğiniz sürece bu bir silme işlemi olarak düşünülecektir.

Kullanıcı açısından baktığınız zaman kaynak üzerinde alınan aksiyonlar hangi yüklemi seçmeniz gerektiğini belirlemektedir. Hizmet sağlayıcı için güncelleme anlamına gelen bir işlem (IsDeleted = true) kullanıcı açısından silme anlamına geliyorsa seçmeniz gereken yüklem Delete olacaktır.

Umarım yararlı bir yazı olmuştur. Diğer yazılarıma göz atmak 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
Adem Catamak

Adem Catamak

var software = ConvertFrom(caffeine)