HTTP Metotlarında Safe ve Idempotent Kavramları

Table of contents

Herkese merhaba bu yazımda sizlere safe ve idempotent kavramlarından bahsedeceğim. Hadi başlayalım :)
Safe, client tarafından yapılan request’in server üzerinde herhangi bir değişiklik yapmadığı (read-only) işlemlerdir.
Idempotent ise, bir metodun ya da fonksiyonun bir ya da birden çok defa çağrılması sonucu değiştirmiyor ise bu metot ya da fonksiyon idempotent olarak nitelendirilir.
Bu durumu örnek vererek açıklayalım;
public void a(){
i = 20;
}
public void b(){
i+=1;
}
“a” metodu bir kez çağrıldığında “i” değişkeninin değeri 20 olacaktır. Bir kez daha çağrıldığında sonuç değişmeyecektir.
“b” metodu bir kez çağrıldığında “i” değişkeninin değeri kaç ise bir fazlası olacaktır. Örneğin “i” nin ilk değeri 20 ise ilk kez çağırdığımızda değeri 21 olacaktır. Bir kez daha çağırırsak “i” nin değeri 22 olacaktır.
Bu durumda “a” metodu idempotent, “b” metodu ise non-idempotent metottur.
Gelin bu durumu HTTP metotları üzerinde inceleyelim.
Örnek olarak veritabanımızda aşağıdaki iki kayıt olsun.
‘id’:’1’, ‘name’:’Gulsun’, ‘surname’:’Cifci’
‘id’:’2’, ‘name’:’Ahmet’, ‘surname’:’Ciftci’GET
Sunucuya /students/1 şeklinde bir istek gönderdiğimizde, id si 1 olan kayıt dönecektir. Bu isteği birden fazla kez tekrarlamamız sonucu değiştirmeyecektir. Bundan dolayı GET idempotenent bir metottur.
PUT
/students/1
body: {‘name’:’Ahmet’, ‘surname’:’Acar’}
Sunucuya yukarıdaki gibi bir istek gönderdiğimizde Metin Ahmet Ciftci ifadesi Ahmet Acar olarak güncellenecektir. İsteği bir kez daha gönderdiğimizde veritabanındaki değer Ahmet Acar olduğunda bir değişiklik olmayacaktır. Bu da idempotenent bir metottur.
- **DELETE
**/students/1
Sunucuya yukarıdaki gibi bir istek gönderdiğimizde id si 1 olan kayıt silinecektir. İlgili istediği tekrar çağırdığımızda id si 1 olan bir kayıt olmadığından herhangi bir işlem gerçekleşmeyecektir. Bu da idempotenent bir metottur.
- **POST
**/students
body: {‘name’:’Esma’, ‘Yılmaz’:’’}
Sunucuya yukarıdaki gibi bir istek gönderdiğimizde, {‘id’:’4’, ‘name’:’Esma’, ‘Yılmaz’:’’}şeklinde bir kayıt oluşacaktır. İlgili isteği bir kez daha çağırırsak {‘id’:’5’, ‘name’:’Esma’, ‘Yılmaz’:’} şeklinde bir kayıt daha oluşacaktır. Yani kaç defa çağırırsak o kadar yeni kayıt oluşacaktır. Bundan dolayı POST non-idempotenent bir metottur.
Bahsedeceklerim bu kadardı umarım faydalı olmuştur. Mutlu kodlamalar 🚀
Subscribe to my newsletter
Read articles from Gulsun Ciftci directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Gulsun Ciftci
Gulsun Ciftci
Hi! I'm Gulsun. I'm a computer engineer. I like developing. I like to improve myself and innovate. I enjoy sharing what I know. Welcome