Rest Api‘ler tasarlıyorsak HTTP metotlarının oldukça önemli iki özelliğinin (idempotency and safety) farkında olmamız gerekiyor. Bu özellikler HTTP spesifikasyonlarında karşımıza çıkmasına rağmen yazılımcılar tarafından sıklıkla göz ardı edilmektedir.
Idempotent nedir?
Bir veya daha fazla kez çalıştırıldığında sonucu değiştirmeyen operasyonlardır.
Örneğin, bulunduğum lokasyonu ‘İstanbul’ olarak ayarlamak istediğimde bu işlemi kaç kez tekrarladığımın bir önemi yoktur. Sonuç olarak database üzerinde şehir alanı ‘İstanbul’ olarak set edilmiş olacaktır. Bu noktada isteği idempotent kılabilmek için client’a dönülen cevabı her seferinde aynı tutmaya çalışmak sık yapılan hatalardan biridir. Idempotency’nin client’a dönülen yanıtla hiçbir ilgisi yoktur. Sunucu tarafı için isteğin kaç kez yapılıyor olduğunun ilk istekten sonra önemsiz kılınması Idempotency için yeterlidir.
Safe nedir?
Sunucu tarafında herhangi bir değişiklik yapmayan operasyonlardır.
Örneğin, şu anki şehrimi alabilmek adına database üzerine yapılan istekler veritabanında herhangi bir değişikliğe sebep olmuyor.Bu durumda ilgili isteğin safe olduğundan bahsedebiliriz. (Nullipotence)
HTTP Method’larını Idempotent ve Safe kavramları özelinde inceleyecek olursak böyle bir tablo ile karsılasıyoruz;
HTTP Method | Idempotent? | Safe? |
Options | Yes | Yes |
Get | Yes | Yes |
Head | Yes | Yes |
Put | Yes | No |
Post | No | No |
Delete | Yes | No |
Patch | No | No |
Geliştirdiğimiz Rest Api’lerinde Http standartlarına olan uygunluk oldukça önemlidir.
Örneğin, Get request’i üzerinden veritabanına insert eylemi gerçekleştirirsek başımıza iş açabiliriz, client’ımız ilgili get request’inin safe olduğunu varsaydığı için request’ini hiç çekinmeden tekrarlama özgürlüğündedir.
Özetle, standartlara bağlı kalmak Api’larımızın hataya dayanıklı ve sürdürülebilir olması için olmazsa olmazdır.
Hoşçakalın..
Çok güzel özetlemişsin, teşekkürler.
BeğenBeğen
Ben teşekkür ederim, yorumunuz gözümden kaçmış
BeğenBeğen
Teşekkür ederim, mülakatta soruldu ve bilemedim. Daha sonra soluğu burada aldım 🙂
BeğenBeğen
Değerli yorumunuz için teşekkür ederim. Umarım faydalı olmuştur.
BeğenBeğen