Idempotent Metod Nədir?

Zamiq Əliyev
2 min readSep 23, 2021

--

Bir metod bir dəfə çağrılan zaman alınan nəticə ilə bir neçə dəfə çağrılarkən alınan nəticə eynidirsə bu bir idempotent metoddur.
Bunu misal üzərindən izah edək;

public void a(){
i = 10;
}
public void b(){
i = i + 1;
}

“a” metodu bir dəfə çağrılanda “i” dəyişəninin dəyəri 10 olacaq. Bu bir neçə dəfə təkrar çağrılan zaman da nəticə dəyişməyəcək.
“b” metodu bir dəfə çağrılanda “i” dəyişəninin dəyəri neçədirsə bir daha artığı olacaqdır. Məsələn “i” nin ilk dəyəri 20-dirsə ilk çağrılan zaman dəyər 21-ə, təkrar çağrılan zaman 23-ə, 24-ə və s. arta-arta gedəcək.
Belə olduğu halda “a” metodu idempotent, “b” metodu ise non-idempotent metoddur.

Bunu bir də HTTP metodları üzərindən incələyək.

HTTP metodları
GET, POST, PUT və DELETE metodlarıdır. Bunlardan başqa da metodlar vardır. Ancaq biz ən çox istifadə olunanları incələyək.

Məsələn bazada 3 sətir olsun:
‘id’:’1’, ‘name’:’Zamiq’, ‘surname’:’Əliyev’
‘id’:’2’, ‘name’:’Nihan’, ‘surname’:’Əlizadə’
‘id’:’3’, ‘name’:’Tamerlan’, ‘surname’:’Əliyev’

GET
Server’ə /students/1 şəklində bir istək göndərdiyimiz zaman, id’si 1 olan sətir qayıdacaqdır. Bu istəyi bir neçə dəfə təkrarlasaq nəticə dəyişməyəcək. Bundan ötrü GET idempotenent bir metoddur.

PUT
/students/1
body: {‘name’:’Əhməd’, ‘surname’:’Məmmədov’}
Server’ə yuxarıdakı kimi bir istək göndərdiyimiz zaman Zamiq Əliyev sətri Əhməd Məmmədov olaraq yenilənəcəkdir. Təkrar sorğuladığımız zaman cədvəldəki dəyər Əhməd Məmmədov olduğundan dəyişən bir şey olmayacaq. Bu da idempotenent bir metoddur.

DELETE
/students/1
Server’ə yuxarıdakı kimi bir istək göndərdiyimiz zaman id’si 1 olan sətir silinəcək. Təkrar sorğulanan zaman id’si 1 olan bir sətir olmadığından hər hansı bir əməliyyat icra olunmayacaq. Bu da idempotenent bir metoddur.

POST
/students
body: {‘name’:’Gunay’, ‘surname’:’Quliyeva’}
Server’ə yuxarıdakı kimi bir istək göndərdiyimiz zaman bazaya {‘id’:’4’, ‘name’:’Gunay’, ‘surname’:’Quliyeva’} şəklində bir sətir əlavə olunacaq. Təkrar sorğuladığımız zaman {‘id’:’5’, ‘name’:’Günay’, ‘surname’:’Quliyeva’} şəklində daha bir sətir əlavə ediləcək. Yəni neçə dəfə sorğulasaq o qədər də sətir yaranacaq. Buna görə də POST non-idempotenent bir metoddur.

GET sorğularının serverdə Cache’lənməsi
Bir GET sorğusu göndərdiyimiz zaman server uyğun nəticəni cache’ləyir. Daha sonra yenidən GET sorğusu gələn zaman cache edilmiş nəticəni geri göndərir.
Veb brauzerlərdə “yenile” funksiyası icra edildikdə səhifə yüklənməzdən əvvəl müvafiq metod idempotent deyilsə — “müvafiq sorğu daha əvvəl göndərildi” mesajını verir və metodu təkrar işə salmaq üçün bizdən izn istəyir. Bu təsdiq mexanizmi idempotent olmayan metodların bizim iznimiz olmadan birdən çox işləməsinin qarşısını alır.

--

--