HTTP Metotlarında Safe ve Idempotent Kavramları

HTTP Metotlarında Safe ve Idempotent Kavramları

Table of contents

No heading

No headings in the article.

Herkese merhaba bu yazımda sizlere safe ve idempotent kavramlarından bahsedeceğim. Hadi başlayalım :)

  1. Safe, client tarafından yapılan request’in server üzerinde herhangi bir değişiklik yapmadığı (read-only) işlemlerdir.

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