Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
REST uç noktaları için geliştiriciler genellikle güncelleştirmelerin yeni kayıtlar oluşturup oluşturmadığını veya yalnızca mevcut kayıtları değiştirip değiştirmediğini denetlemek ister.
If-Match HTTP üst bilgisi, Bu denetimi Veri API'sinin oluşturucusunda (DAB) sağlar.
VARSAYıLAN olarak DAB, ve PATCH değerlerini upsert işlemleri olarak görürPUT:
Kaynak varsa: güncelleştirilir.
Yoksa eklenir.
-
PUT→ tam upsert (kaynağın yerini alır). -
PATCHartımlı upsert → (kısmi güncelleştirme uygular).
-
Bu davranışı yalnızca güncelleştirme semantiğine eklendiğinde If-Match: * değişir.
DAB'de If-Match ne yapar?
If-Match yalnızca joker karakter değeriyle *desteklenir.
| Üst Bilgi Değeri | Davranış |
|---|---|
If-Match: * |
Yalnızca kaynak varsa güncelleştirme gerçekleştirin; eksikse → 404 Bulunamadı. |
If-Match: <any other> |
Reddedilmiş; 400 Hatalı İstek (Etags not supported, use '*'). |
| (yok) | Upsert davranışı (bulunamazsa ekleyin, aksi takdirde güncelleştirin). |
Davranışa genel bakış
- DAB kayıt başına ETag veya sürüm eşleştirme uygulamaz.
- Eşzamanlılık belirteci değerlendirilmez.
*yalnızca "var olması gerekir" onaylarını alır. - Yalnızca REST için geçerlidir, GraphQL için geçerli değildir.
- DELETE işlemleri için şu anda anlamlı değildir.
PUT ile If-Match kullanma
olmadan If-Match, put kaynak mevcut olmadığında ekler (döndürür 201 Created).
Yalnızca güncelleştirme örneği
İstek
PUT /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Return of the King"
}
Başarı (kayıt mevcut)
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Return of the King"
}
Hata (kayıt eksik)
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Upsert ekleme örneği (If-Match yok ve kayıt yoktu)
İstek
PUT /api/Books/id/500
Content-Type: application/json
{
"title": "Inserted via PUT",
"publisher_id": 7
}
Yanıt
HTTP/1.1 201 Created
Location: id/500
Content-Type: application/json
{
"id": 500,
"title": "Inserted via PUT",
"publisher_id": 7
}
PATCH ile If-Match kullanma
PATCH benzer şekilde davranır. olmadan If-Matchartımlı bir upsert gerçekleştirir. ile If-Match: *yalnızca mevcut satırları güncelleştirir.
İstek
PATCH /api/Books/id/1
If-Match: *
Content-Type: application/json
{
"title": "The Two Towers"
}
Başarılı Olduğunda Yanıt
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 1,
"title": "The Two Towers"
}
Bulunamadığında yanıt
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"error": "No Update could be performed, record not found"
}
Geçersiz If-Match Kullanımı
(tırnak içine alınmış dizeler dahil) dışındaki * tüm değerler reddedilir.
İstek
PUT /api/Books/id/1
If-Match: "abc123"
Content-Type: application/json
{
"title": "To Kill a Mockingbird"
}
Yanıt
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Etags not supported, use '*'"
}
İnceleme
- Upsert (insert-or-update) semantiği için atla
If-Match. - Katı yalnızca güncelleştirme semantiği için kullanın
If-Match: *(öğe eksikse 404). - Başka bir değer kullanmayın. Gerçek ETag eşleştirme uygulanmaz.