24 Eylül 2023 Pazar

Kaynakların Anlık Görüntüsü Nasıl Alınır.

 

Bu konuda her güncelleme öncesinde kaynağın anlık görüntüsünün nasıl alınacağını açıklar.  Bir istemci bir kaynağı PUT yöntemiyle güncellediğinde, sunucu kaynağı mevcut durumunu günceller ve istemcinin güncellemeden önce ne olduğunu bilmesini imkan vermez. Ancak müşterilerin zamanda geri gitmeyi ve değişikliklerin geçmişine göz atmayı bekledikleri durumlar vardır. 


Örneğin belirli kavşaklardaki trafik koşullarının geçmiş ve şimdiki anlık görüntülerini sağlamak için bir web hizmeti tasarlandığını hayal edelim. Çoğu müşteri en son koşulları görmek ister, ancak bazı müşteriler geçmiş trafik koşullarına göz atmak isteyebilir. 

Alternatif olarak bir wiki düşünün. Wiki'deki her sayfa için herhangi bir müşterinin herhangi bir sayfada yapılan değişiklikleri alabilmesi karışlatırabilmesi ve değerlendirmesi için sunucunun her sayfa için mevcut ve geçmiş revizyonların bir revizyon yığınının tutması gerekir.

Bir istemci bir kaynağı güncellemek için PUT  isteği gönderdiğinde kaynağı güncelemeden önce dolaylı olarak bir anlık görüntü - bir kopya kaynağı - oluşturur. Güncellenen kaynağın temsilinde, anlık görüntüye bir bağlantı eklenir. Ayrıca anlık görüntü kaynağı güncelenen kaynağa bir bağlantı eklenir.  Bir istemci bir DELETE isteği gönderildiğinde tüm anlık görüntülerle bir kaynağı silinir.

Özünde bu tarih müşterinin kaynakların sürümlerin nasıl oluşturacaklarını ve yöneteceklerini öğrenmelerine gerek kalmadan kaynaklar için basit bir sürüm oluşturma mekanizması oluşturmamıza olanak tanır.

Sürümlerin umursamayan istemciler, HTTP'nin tek tip arayüzünün her zamanki gibi sunucunun anlık görüntülerin koruduğunu fark etmektedir. Sürümleri önemseyen istemciler geçmiş sürümlere gözatabilir.  Sunucunun deposunda her anlık görüntü tam bir kopya olabilir veya yalnızca önceki sürümden farklılıkların listesini içerebilir. İşte yeni bir anlık görüntü oluşturan örnek; 

# Request
PUT /trails/ColchuckLake HTTP/1.1
Host: wiki.example.org
If-Unmodified-Since: Sun, 01 Nov 2009 12:34:43 GMT Content-Type: application/atom+xml;type=entry;charset=UTF-8

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>
</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id> <atom:content xml:lang="en" type="html">

... initial draft ... </atom:content>

</atom:entry>

# Response
HTTP/1.1 204 No Content


Bir PUT isteğine yanıt olarak sunucu kaynağı http://wiki.example.org/trails/ColchukLake/s1 adresine kopyalar. 

# Request
GET /trails/ColchuckLake HTTP/1.1 Host: wiki.example.org

# Response
HTTP/1.1 200 OK
Last-Modified: Sun, 01 Nov 2009 16:24:56 GMT
Content-Type: application/atom+xml;type=entry;charset=UTF-8

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>
</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id> //Kaynağın Mevcut Sürümü
<atom:link href="http://wiki.example.org/trails/ColchuckLake" rel="self"/> <atom:link href="http://wiki.example.org/trails/ColchuckLake/s1" rel="previous"/> <atom:content xml:lang="en" atom:type="html"> //Anlık Görüntü

... updated draft ... </atom:content>

</atom:entry>


Önceki ilişkiye sahip bağlantı kaynağı önceki anlık görüntüsüne bir bağlantıdır. İstemci kaynağı değiştirmek için başka bir PUT isteği gönderdiğinde sunucu http://wiki.example.org/trails/ColchukLake/s2 adresinde yeni bir anlık görüntü oluşturmak için daha önce gösterilen işlemi tekrarlayabilir.

# Request to update the resource
PUT /trails/ColchuckLake HTTP/1.1
Host: wiki.example.org
Content-Type: application/atom+xml;type=entry;charset=UTF-8 If-Unmodified-Since: Sun, 01 Nov 2009 16:24:56 GMT

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>
</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id> <atom:content xml:lang="en" type="html">

... updated draft ... </atom:content>

</atom:entry>

# Response
HTTP/1.1 204 No Content


Bu adımdan sonra URI http://wiki.example.org/trails/ColchukLake adresindeki kaynak en son sürümdür. Öncesinde http://wiki.example.org/trails/ColchukLake/s2, ardından http://wiki.example.org/trails/ColchukLake/s1 geliyor. İstemci önceki ilişki türüyle bağlantıyı kullanarak eski anlık görüntüleri almak için geri doğru gidebilir. 
Bu güncellemeden sonra http://wiki.example.org/trails/ColchukLake/s2  tin bir temsili kendi anlık görüntüsünü içerir. http://wiki.example.org/trails/ColchukLake/s2


# Request

GET /trails/ColchuckLake/s2 HTTP/1.1 Host: wiki.example.org

# Response
HTTP/1.1 200 OK
Content-Type: application/atom+xml;type=entry;charset=UTF-8

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>
</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id>
<atom:link href="http://wiki.example.org/trails/ColchuckLake/s2" rel="self"/> // Mevcut anlık görüntü kaynağı

<atom:link href="http://wiki.example.org/trails/ColchuckLake/s1" rel="previous"/> //Bir önceki anlık görüntü kaynağı

 <atom:link href="http://wiki.example.org/trails/ColchuckLake" rel="next"/> //Sonraki görüntü kaynağı

<atom:content xml:lang="en" atom:type="html">

... updated draft ...

</atom:content> 

</atom:entry>


İstemci önceki anlık görüntülere gitmek için önceki ilişki türüyle bağlantıyı kullanabilir veya daha yeni anlık görüntüllere gitmek için bir sonraki ilişkiye bağlantı kullanabilir.

Hiç yorum yok:

Yorum Gönder