Kaynaklar nerede ve nelerdir?
REST, kaynakları vatansız, keşfedilebilir bir şekilde ele almakla ilgilidir. HTTP üzerinden uygulanmasına gerek yoktur, JSON veya XML'e dayanmak zorunda değildir, ancak linkler ve ID'ler istendiği için bir hipermedia veri formatının kullanılması ( HATEOAS prensibine bakınız ) şiddetle tavsiye edilir.
Öyleyse, soru şu şekilde olur: İnsan kaynakları açısından eşitleme hakkında nasıl düşünür?
İki yönlü senkronizasyon nedir? **
İki yönlü senkronizasyon, bir düğüm grafiği üzerinde bulunan kaynakları güncelleme işlemidir, böylece işlem sonunda tüm düğümler bu kaynakları yöneten kurallara uygun olarak kaynaklarını güncellemiş olur. Genellikle, bunun tüm düğümlerin grafikte mevcut olan kaynakların en son sürümüne sahip olacağı anlaşılmaktadır. En basit durumda, grafik iki düğümden oluşur: yerel ve uzak. Yerel senkronizasyonu başlatır.
Bu nedenle ele alınması gereken kilit kaynak bir işlem günlüğüdür ve bu nedenle, bir senkronizasyon işlemi HTTP altındaki "öğeler" koleksiyonu için şöyle görünebilir:
Adım 1 - Yerel işlem günlüğünü alır
Yerel: GET /remotehost/items/transactions?earliest=2000-01-01T12:34:56.789Z
Uzaktan: buna benzer alanlar içeren işlem günlüğü içeren gövde ile 200 OK .
itemId
- paylaşılan bir birincil anahtar sağlamak için bir UUID
updatedAt
- Verilerin en son güncellendiğinde (revizyon geçmişinin gerekli olmadığını varsayarak) koordineli bir nokta sağlamak için zaman damgası
fingerprint
- updateAt
Birkaç saniye sonra, hızlı karşılaştırma için verilerin içeriğinin bir SHA1 karması
itemURI
- daha sonra alınabilmesi için öğeye tam bir URI
Adım 2 - Yerel uzak işlem günlüğünü kendisiyle karşılaştırır
Bu, nasıl senkronize edileceğine ilişkin iş kurallarının uygulanmasıdır. Tipik olarak, itemId
yerel kaynağı tanımlayacak, sonra parmak izini karşılaştıracaksınız. Bir fark varsa o zaman bir karşılaştırma updatedAt
yapılır. Bunların aramaya çok yakın olması durumunda, diğer düğüme dayanma (belki de daha önemlidir) veya diğer düğüme itme kararı (bu düğüm daha önemlidir) gerekir. Uzak kaynak yerel olarak mevcut değilse, bir push girişi yapılır (bu, ekleme / güncelleme için gerçek verileri içerir). Uzak işlem günlüğünde bulunmayan herhangi bir yerel kaynağın değişmediği varsayılmaktadır.
Çekme istekleri uzak düğüme karşı yapılır, böylece veriler yerel olarak kullanılarak kullanılabilir itemURI
. Daha sonra yerel olarak uygulanmazlar.
Adım 3 - Yerel senkronizasyon işlem günlüğünü uzaklara itin
Yerel: PUT /remotehost/items/transactions
yerel senkronizasyon işlem günlüğünü içeren gövdeyle.
Uzak düğüm , çok fazla ek yüke yol açması muhtemel ise, bunu senkronize (küçük ve hızlıysa) veya senkronize olmayan şekilde (düşünerek KABUL EDİLİR ) düşünebilir . Eşzamanlı bir işlem varsayalım, sonuç başarı veya başarısızlığa bağlı olarak ya 200 OK ya da 409 CONFLICT olacaktır . Bir 409 ÇATIŞMA durumunda , uzak düğümde iyimser bir kilitleme hatası olduğu için işlem yeniden başlatılmalıdır (birisi senkronizasyon sırasında verileri değiştirdi). Uzaktan güncellemeler kendi başvuru işlemleriyle işlenir.
Adım 4 - Yerel olarak güncelleyin
2. Adımda çekilen veriler yerel olarak bir başvuru işlemi altında uygulanır.
Yukarıdakiler mükemmel olmasa da (yerel ve uzaktan kumandanın başını belaya sokabileceği ve yerelden uzaktan çekme verilerinin büyük bir PUT'a doldurmaktan daha verimli olabileceği çeşitli durumlar vardır), REST'in bir çiftlikte nasıl kullanılabileceğini göstermektedir. yönlü senkronizasyon işlemi.