2 Eylül 2023 Cumartesi

Kısmi Güncellemeler için Kaynaklar Nasıl iyileştirilir?


 Kısmi Güncellemeler İçin Kaynaklar Nasıl İyileştirilir?


Bir noktada, mevcut bir kaynağı kısmen güncellemeniz gereken bir durumla karşılaşmanız muhtemeldir. Kaynak büyükse ve/veya yapmak istediğiniz güncelleme küçükse bu durum ortaya çıkabilir. Bu durumlarda, temsilin tamamını almak için bir GET isteği göndermek, küçük değişikliği yapmak ve kaynağı güncellemek için tüm temsili içeren bir PUT isteğini sunucuya geri göndermek israf gibi görünebilir. Böyle bir durumla karşı karşıya kaldığınızda ilk göz önünde bulundurmanız gereken çözümlerden biri, söz konusu kaynağın kısmi güncelleme ihtiyacını ortadan kaldıracak şekilde hassaslaştırılmasıdır.

İstemcilerin kaynakları kısmen güncelleştirebilmesi için kaynakları nasıl hassaslaştıracağınızı bilmek gerekir.


İstemcinin değiştirebileceği kaynağın bölümlerini kapsayan yeni bir kaynak tasarlamak. İstemcilerin bu kaynağı güncellemek için PUT kullanmasına izin verin, böylece orijinal kaynak kısmen güncellenir.

Bu çözümün en önemli avantajı, istemcilere, PUT HTTP yöntemini kullanarak orijinal kaynağın alt kümelerini güncelleme yeteneği vermesidir. Ayrıca, önceden gizli olan kaynakların kendi URI'leri aracılığıyla istemcilere erişilebilir hale getirilmesi gibi ek bir avantaja da sahiptir.

Örneğin, bir müşteri kaynağının aşağıdaki gösterimini düşünün:

# Request
GET /customers/1 HTTP/1.1 Host: www.example.org

# Response
HTTP/1.1 200 OK
Content-Type: application/xml;charset=UTF-8 Last-Modified: Thu, 05 Nov 2009 01:54:19 GMT ETag: "ca87aa4ff1505934281d91f807b25b3c"

<customer xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="self" href="http://www.example.org/customers/1"/> <name>J. P. Goodright</name>
<status>active</status>
<address>

<street>123 Main</street> <city>Byteville</city> <state>MD</state> <postal-code>12345</postal-code>

</address> <billing-contact>

<name>P.J. Billingsley</name>


<email>pjbill@example.org</email> <voice-phone>123-456-7890</voice-phone> <fax-line>234-567-8901</fax-line>

</billing-contact> <services>

<preferred-shipping>two-day</preferred-shipping> <billing-method>net-30</billing-method> <minimum-order>1000</mininum-order> <customer-discount>10%</customer-discount>

</services> </customer>



Müşteri kaynağının fatura iletişim bilgilerini güncellemek istediğinizi varsayalım. Bunu desteklemek için sunucu, orijinal kaynaktan istenen öğeleri içeren yeni bir "faturalandırma ilgili kişisi" kaynağı sunacak şekilde kaynağı hassaslaştırabilir.


# Request
GET /customers/1/billing-contact HTTP/1.1 Host: www.example.org

# Response
HTTP/1.1 200 OK
Content-Type: application/xml;charset=UTF-8 Last-Modified: Thu, 05 Nov 2009 01:54:19 GMT ETag: "d65b17759967753e7eb37b28f1bdb1fa"

<billing-contact xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link ref="self" href="http://www.example.org/customers/1/billing-contact"/> <name>P.J. Billingsley</name>
<email>pjbill@example.org</email>
<voice-phone>123-456-7890</voice-phone>
<fax-line>234-567-8901</fax-line>

</billing-contact>


Daha sonra müşteri kaynağının gösterimini, faturalandırma ilgili kişi kaynağına bir bağlantı içerecek şekilde iyileştirebilirsiniz.


# Request
GET /customers/1 HTTP/1.1 Host: www.example.org

# Response
HTTP/1.1 200 OK
Content-Type: application/xml;charset=UTF-8 Last-Modified: Thu, 05 Nov 2009 01:54:19 GMT ETag: "99d37a01bc588d8743f704eaffdb22b0"

<customer xmlns:atom="http://www.w3.org/2005/Atom">
<atom:link rel="self" href="http://www.example.org/customers/1"/>
<atom:link rel="related" href="http://www.example.org/customers/1/billing-contact"/> <name>J. P. Goodright</name>
<status>active</status>
<address>

<street>123 Main</street> <city>Byteville</city>


<postal-code>12345</postal-code> </address>
<services>

<preferred-shipping>two-day</preferred-shipping> <billing-method>net-30</billing-method> <minimum-order>1000</mininum-order> <customer-discount>10%</customer-discount>

</services> </customer>


Müşteriler artık http://www.example.org/customers/1/billing-contact adresindeki URI kaynağına bir PUT isteği göndererek fatura ilgili kişisini güncelleyebilir.

Bu yaklaşımı müşteri kaynağının diğer bölümlerine genişletebilirsiniz. Örneğin, aşağıdaki PUT isteği müşteri durumunu ve tercih edilen gönderim yöntemini günceller:


# Request
PUT /customer/1234/info HTTP/1.1
Content-Type: application/xml;charset=UTF-8 If-Match: "bfcc688bd542e17f27da0f82200c35ea" If-Unmodified-Since: Thu, 05 Nov 2009 01:54:19 GMT

<customer-info>
<status>premium</status> <preferred-shipping>next-day</preferred-shipping>

</customer-info>


Alternatif olarak, bir müşterinin mevcut e-posta adresini kaldırıp iki yeni e-posta adresi eklemek istediği bir durumu düşünün. Bu durumda, tüm e-posta adreslerini başka bir kaynak olarak gösterebilir ve istemcinin bir PUT isteği göndererek bu kaynağı güncellemesine izin verebilirsiniz:


# Request
PUT /customer/1234/emails HTTP/1.1
Content-Type: application/xml;charset=UTF-8 If-Match: "b5b55c8a7f18dd77b4b2d94eed7f1be5" If-Unmodified-Since: Thu, 05 Nov 2009 01:54:19 GMT

<emails>
<email type="work">pjbill1@example.org</status> <email type="alt">jane1@example.org</status>

</emails>


Not: Bu tür kaynaklar tutarsız veya kirletici görünebilir. "Müşteri bilgileri" veya "e-postalar" kaynaklarının, müşteri kaynağının belirli kısmi güncellemelerini desteklemek dışında var olma nedenleri yoktur. Ancak, erişim ve güncellemeler için uygun olan her şeyin kaynak olarak aday olduğunu unutmayın.

Hiç yorum yok:

Yorum Gönder