- Konu sahibi
- #1
HTTP PUT, istemcinin belirli bir kaynak adresindeki veriyi gönderdiği temsille oluşturmasını veya mevcut temsili değiştirmesini isteyen HTTP metodudur. Örneğin bir kullanıcının profilini
PUT isteğinde kaynak adresi istemci tarafından bilinir. Sunucu isteği kabul ederse mevcut kaynağı gönderilen temsille değiştirir veya destekliyorsa o adreste yeni bir kaynak oluşturur. Başarılı yanıt
Bir PUT isteği genellikle şu parçalardan oluşur:
Örneğin mevcut bir kullanıcı kaydını PUT ile göndermek şöyle görünebilir:
Bu örnekte sunucu isteği kabul ederse
Metot seçimi, istemcinin hedef adresi ve yaptığı değişikliğin niteliğine göre yapılır:
Örneğin kullanıcı kimliği istemci tarafından belirleniyorsa
PUT ile PATCH'i eş anlamlı sanmak: PUT çoğunlukla kaynağın tamamını temsil eder. Eksik alanların nasıl ele alınacağı bilinmiyorsa mevcut verinin üzerine yazılması veya alan kaybı yaşanması mümkündür.
Koleksiyona PUT gönderip sunucunun yeni kimlik üreteceğini beklemek: PUT belirli bir hedef adresle ilişkilidir. Sunucunun adres üretmesi bekleniyorsa API'nin POST davranışını kullanın.
Başarıyı yalnızca HTTP durum koduyla varsaymak:
Yetkilendirmeyi atlamak: PUT mevcut bir kaynağı değiştirebildiği için sunucu, kullanıcının o kaynağı değiştirme yetkisini ayrıca kontrol etmelidir.
/users/42 adresinde güncellemek için PUT kullanabilirsiniz. PUT işlemi genellikle tam kaynak güncellemesi için tercih edilir; yalnızca birkaç alanı değiştirmek istiyorsanız PATCH daha uygun olabilir.PUT isteğinde kaynak adresi istemci tarafından bilinir. Sunucu isteği kabul ederse mevcut kaynağı gönderilen temsille değiştirir veya destekliyorsa o adreste yeni bir kaynak oluşturur. Başarılı yanıt
200 OK, 204 No Content ya da yeni kaynak oluşturulduğunda 201 Created olabilir. Hangi durum kodunun kullanılacağı API sözleşmesinde belirtilmelidir.PUT nasıl çalışır?
Bir PUT isteği genellikle şu parçalardan oluşur:
- Hedef kaynağın kesin adresi belirlenir. Örneğin
/users/42adresi belirli bir kullanıcıyı temsil eder. - İstek gövdesine kaynağın gönderilecek temsili yazılır.
- Gövdenin biçimi
Content-Type: application/jsongibi bir başlıkla belirtilir. - Sunucu veriyi doğrular, yetkiyi kontrol eder ve kaynağı oluşturur veya değiştirir.
- İstemci durum kodunu ve gerekiyorsa yanıt gövdesini kontrol eder.
Örneğin mevcut bir kullanıcı kaydını PUT ile göndermek şöyle görünebilir:
Kod:
PUT /users/42 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Ayşe Yılmaz",
"email": "[email protected]",
"active": true
}
Bu örnekte sunucu isteği kabul ederse
/users/42 kaynağını gönderilen temsile göre günceller. API tam kaynak bekliyorsa gövdede bulunmayan alanlar silinebilir, varsayılan değere dönebilir veya doğrulama hatasına neden olabilir. Bu davranış tahmin edilmemeli; API sözleşmesinden kontrol edilmelidir.PUT, PATCH ve POST farkı
Metot seçimi, istemcinin hedef adresi ve yaptığı değişikliğin niteliğine göre yapılır:
| Metot | Tipik kullanım | Adres ve tekrar davranışı |
|---|---|---|
| PUT | Bilinen adresteki kaynağı oluşturma veya tam temsille değiştirme | Adres istemci tarafından bilinir; aynı istek aynı sonucu hedefler |
| PATCH | Kaynağın yalnızca belirli alanlarını değiştirme | Gönderilen değişiklik işleminin API kurallarına göre uygulanması |
| POST | Yeni alt kaynak oluşturma veya bir işlem başlatma | Hedef adres çoğunlukla koleksiyondur; sunucu yeni adres üretebilir |
Örneğin kullanıcı kimliği istemci tarafından belirleniyorsa
PUT /users/42 mantıklıdır. Yeni kullanıcı kimliğini sunucunun üretmesini istiyorsanız POST /users daha uygun olabilir. Yalnızca e-posta alanını değiştirmek için PUT kullanmak yerine PATCH kullanılması, istemeden diğer alanların etkilenmesini önleyebilir.Uygulanabilir kullanım ve kontrol adımları
- Güncellemek istediğiniz kaynağın kesin adresini belirleyin. Koleksiyon adresiyle tekil kaynak adresini karıştırmayın.
- API sözleşmesinde PUT gövdesinin hangi yazılabilir temsili ve zorunlu alanları beklediğini kontrol edin.
- Zorunlu alanları, veri türlerini ve
Content-Typebaşlığını doğru gönderin. - İsteği yetkili bir istemciyle gönderin ve yanıtın durum kodunu değerlendirin.
2xxyanıtı başarı anlamına gelir; ancak dönen kaynağın gerçekten beklenen durumda olduğunu da kontrol edin. - İstek başarısızsa
4xxyanıtlarında gövde içindeki doğrulama veya yetki bilgisini inceleyin.5xxyanıtlarında isteği sınırsız biçimde tekrarlamak yerine sunucu durumunu ve tekrar politikasını değerlendirin. - Aynı PUT isteğini güvenli biçimde tekrarlayabilmek için istemci ve sunucu kaynak tanımını tutarlı tutun. Bu özellik, PUT'un idempotent olmasından kaynaklanır; ancak ağ hatası sırasında isteğin sunucuya ulaşıp ulaşmadığını tek başına kesinleştirmez.
Sık yapılan hatalar
PUT ile PATCH'i eş anlamlı sanmak: PUT çoğunlukla kaynağın tamamını temsil eder. Eksik alanların nasıl ele alınacağı bilinmiyorsa mevcut verinin üzerine yazılması veya alan kaybı yaşanması mümkündür.
Koleksiyona PUT gönderip sunucunun yeni kimlik üreteceğini beklemek: PUT belirli bir hedef adresle ilişkilidir. Sunucunun adres üretmesi bekleniyorsa API'nin POST davranışını kullanın.
Başarıyı yalnızca HTTP durum koduyla varsaymak:
200 veya 204 yanıtı isteğin kabul edildiğini gösterir; uygulamanın iş kuralı sonucunu ayrıca doğrulamak gerekebilir.Yetkilendirmeyi atlamak: PUT mevcut bir kaynağı değiştirebildiği için sunucu, kullanıcının o kaynağı değiştirme yetkisini ayrıca kontrol etmelidir.