12 Aralık 2021 Pazar

Koşullu PUT ve DELETE talepleri Nasıl Gönderilir.

 

İstemci PUT kullanarak yeni bir kaynak oluşturduğunda veya sunucu If Kaynağa yapılan önceki bir GET veya PUT isteğinden beri Değiştirilmiş ve/veya ETAG başlıkları her zamanki gibi PUT isteklerinde bulunur.

İstemcinin önceki bir istekten beri Değiştirildiği Tarih ve/veya ETAG başlıkları varsa kaynak PUT , DELETE istekleri yaparken aşağıdaki başlıkları bu talepli koşullarda eklenir.

* Last-Modified başlığıyla aynı değere sahip bir If-Unmodified-Since başlığı. Sunucunun isteği işlenmesi gerektiğini belirtmek için yanlızca suncuda bu başlıkta belirtilen zamandan beri kaynakta değişiklik yapılmalıdır.

*ETAG başlığıyla aynı değere sahip bir If-Match başlığı sunucu isteği yalnızca ve ancak sağlanan üstbilgi değeri eşlenirse işlemelidir. Mevcut ETAG değeri için belirtilmelidir.

Sunucu 412 (Ön Koşul Başarısız) durum kodunu döndürürse koşulsuz bir yeni Last-Modified ve ETAG başlıklarını almak için GET isteği kaynağının güncellenmesi veya silinmesi kararı yeni temsile göre hala geçerlidir. Sonra bu başlıklarla PUT veya DELETE isteğini tekrar etmeniz gerekir.

Koşullu bir PUT isteğinde bulunan bir istemciye örnek;

# Request
PUT /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
If-Unmodified-Since: Sun, 09 Aug 2019 00:56:14 GMT
If-Match: "3f4a74db207d0447d46710a64971e777"
.....
# Response
HTTP/1.1 200 OK
Date: Sun, 16 Aug 2019 01:00:23 GMT
Content-Location: http://www.example.org/reviews/notes_from_underground
Last-Modified: Sun, 16 Aug 2019 01:00:23 GMT
E-Tag: "5bbae963eb30e03cf1fd218a9dc92a5b"
Content-Type: application/xml; charset=UTF-8
.....

Bu istekte, If-Unmodigied-Since değeri Last-Modified başlığının değeridir. Müşteri önceki bir talep sırasında elde ettiği, benzer şekilde değer If-Match başlığı , ETAG başlığının değeridir. 
Müşteri zaten sahip değilse temsilinin kopyası için veya sunucu yanıt kodunu döndürürse bu başlıklar 412 almak için yeni bir koşulsuz istek GET gönderilmesi gerekir.

# Unconditional GET request
GET /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
Cache-Control: no-cache
Pragma: no-cache
# Response
HTTP/1.1 200 OK
Content-Type: application/xml;charset-UTF-8
Date: Sun, 16 Aug 2019 01:00:23 GMT
Last-Modified: Sun, 09 Aug 2019 00:55:46 GMT
ETag: "3f4a74db207d0447d46710a64971e777"

HEAD talebinde bulunarak bu başlıkları elde etmek yeterli değildir. İstemciler bu başlıklar kaynağın mevcut durumuna karşılık gelir. Başlıkları bir HEAD isteği araclığıyla tek başına almak, müşterinin bunu bilmesine yardımcı olmayacaktır. Kaynağın mevcut durumu, body nin onunla birlikte alınması gerekir. Üstbilgiler dahil.


İstemci DELETE istekleri için aynı süreci izlemelidir. 412 herhangi bir istek istemcinin güncelleme veya silme kararı verdiğini gösterir.


# Conditional request
PUT /reviews/notes_from_underground HTTP/1.1
Host: www.example.org
If-Unmodified-Since: Sun, 09 Aug 2019 00:56:14 GMT
If-Match: "3f4a74db207d0447d46710a64971e777"
# Response
HTTP/1.1 412 Precondition Failed

Content-Type: application/xml;charset=UTF-8
<error>
   <message>The review you are trying to update has changed.</message>
   <description>You are trying to update a resource based on stale information.
   Get a new copy of this review, resolve any differences, and retry.</description>
</error>

Hiç yorum yok:

Yorum Gönder