Drupal 7'deki bir web hizmeti aracılığıyla 3. taraf veri yapılarını entegre etmenin en güvenilir ve hataya dayanıklı yolu nedir?


8

Uzak veri yapılarını Drupal'a entegre etmek için bir dizi strateji gördüm. Bazı modüller istikrar kazandığı ve kullanım durumları denendiği için stratejiler gelişiyor gibi görünüyordu.

Bir REST API'si aracılığıyla ortaya konan bir dizi veri türü (market, market_hours, vender, durak, üretim) vb. Harici hizmet için kimliklerin Drupal ile ilgili olması gerekir, yani bir "pazar" yüklerken "market_hours" ve "stall" dan veri almak istiyoruz. Drupal'da düzenli olarak senkronize edilen salt okunur içerik olarak bunu temsil etmenin en iyi yolu ne olurdu?

Bunu aşağıdaki kriterlerle değerlendirmeye çalışıyorum:

Drupal'da Veri Yapıları:

Düğümler ve Özel Varlıklar

Gördüğüm web hizmetlerini içeren bir dizi senaryo özel varlıkları kullanıyor. CRUD operasyonlarını basitleştirir. Ancak, bu öğeler herkesin görebileceği şekilde "içerik" olacaktır.

Depolama (Yerel ve Uzak):

Hizmetlerin uzak varlıklar olarak yüklendiği birkaç örnek gördüm, bu modül https://drupal.org/project/wsdata için bir kütüphane oluşturur . Bu en çekici geliyor, ancak çok fazla kullanım örneği görmedim. Özel kod örnekleri de var: https://drupal.org/sandbox/fago/1493180

Verileri Senkronize Etme:

Feeds vs Migrate vs Guzzle vs 'Web Servis İstemcisi' vs 'Web Servisleri Verileri'

Bir dizi seçenek var. Yayınlar artık varlıkları destekliyor. Taşıma, özellikle özel senaryolar için özet akışlarından çok daha temiz görünüyor. Ayrıca, uzak hizmetler ile senkronize etmek için bir guzzle istemcisi kullanan kişiler gördüm: http://drupalcode.org/project/ckan.git/blob/refs/heads/ckan_dgu_7.x-1.x:/ckan.drush. inc # l273 . Ayrıca WS Client modülünün https://drupal.org/project/wsclient özel olarak dinlenme istemcisi olarak oluşturulmuş bir seçenek sunduğunu fark ettim . Web Hizmetleri Veriler doğrudan bir hizmetten yüklenir ve yerel olarak önbelleğe alınır.

Düşünceleriniz için teşekkürler.


Kimsenin size özel kullanım durumunuz için en güvenilir ve hataya dayanıklı çözüm hakkında kesin bir cevap verebileceğinden emin değilim.
rooby

"Veri" modülü, besleme modülü ile birlikte kullanılabilen başka bir olasılıktır (şu anda bu sayıda çözüme ihtiyaç duyulmaktadır - drupal.org/node/1033202 )
rooby 16:13

Veri modülünü kullanmak, verileri ayrı ayrı tablolarda depolamamıza izin verir. Bu, görünümler yoluyla liste oluşturmak için iyi olur, ancak varlık sisteminin (düğümler veya özel varlıklar) faydalarını kullanmamıza izin vermez.
acouch

Evet, veri modülünün tüm veri öğelerinizin varlıklarını oluşturan bir alt modül veri_entliği vardır.
rooby

Yanıtlar:


16

1. Sorunun yeniden düzenlenmesi

Örneğiniz, verilerin yalnızca Drupal tarafından okunduğunu ve yalnızca tek yönlü senkronizasyonla önerildiğini göstermektedir. Burada düşünülmesi gereken en önemli faktör olduğunu düşünüyorum, çünkü gerçekte uyguladığınız her çözüm uzaktan depolama, senkronizasyon ve yerel önbelleklemenin bir çeşidi olacaktır - yerel önbellekleme Drupal veritabanında varlık olsa bile.

Yani soru, "yerel depolama ile uzak depolama" yerine, şöyle olacaktır:

  • Verileri yerel olarak önbelleğe alırsanız;
  • Verileri gerçek varlıklar olarak önbelleğe alır ve verileri düzenli olarak senkronize etmek için Yayınlar (veya benzeri) kullanırsanız; VEYA
  • Senkronizasyonu ve önbelleğe almayı sağlayan özel yapılmış bir modül kullanmanız gerekir.

İlginizi çekebilecek bir makale " Drupal 7'deki Uzak Varlıklar " ile ilgilidir.

2. Verilerin önbelleğe alınması

Genel olarak, verilerin önbelleğe alınması iyi bir fikirdir:

  • Diğer hizmetlerin kesintilerine veya bağlantıdaki zaman aşımlarına karşı korunursunuz;

  • Verilerinizin Drupal veritabanınızda bulunması, işlemleri hızlandıracaktır;

  • Verilerinizin Drupal veritabanınızda bulunması, Views gibi diğer modüllerle entegrasyon sağlama olasılığınızın daha yüksek olduğu anlamına gelecektir (bu garanti edilmese de).

Verileri önbelleğe almamanın tek avantajı, bazı durumlarda tercih edilen eski verileri asla almamanızdır - bazen eski veriler yerine veri gösterilmemesi tercih edilir. Bunu verdiğiniz örnekte bir fayda olarak görmüyorum, bu yüzden bu yanıtı yerel önbelleğe almayı içeren bir çözüme odaklayacağım.

3. Yerel varlıklar + Senkronizasyon

Yerel varlıklara sahip olma ve bunları kendiniz senkronize etme seçeneğini tercih ederseniz, orijinal sorularınıza geri döneriz:

  • Düğüm veya özel varlıklar kullanırsanız;

  • Senkronizasyon için hangi modül en iyisidir.

3.1 Düğümler ve Özel varlıklar

  • Bir düğümün tam olarak ne olduğunun tanımı oldukça açık olan düğümdür. Düğümlerde dokümantasyon sayfasından düğümleri "saklı" Sitenizde olan "gönderme" olduğunu göstermektedir - Verilerinizi uygulamak ikisi de;

  • Bir Drupal geliştiricisi olarak, eğer bir şey bir düğümse, o zaman sitenin kendisinde manipüle edebilmem gerektiğini beklerdim;

  • Drupal kullanıcısı olarak, benzer şekilde düğümlerin düzenlenmesini beklerdim;

  • Bu Drupal 8 sayısı https://drupal.org/node/2019031 , "salt okunur" kavramının, paket düzeyi yerine varlık düzeyinde uygulanacak bir kavram olduğunu göstermektedir. Eğer bu uygulanırsa, bu rotadan aşağı inerek bundan faydalanırsınız.

Özetlemek gerekirse: verileriniz salt okunur ve uzaktan saklanırken verilerinizi temsil etmek için özel bir varlık türü kullanmak daha mantıklıdır.

3.2 Senkronizasyon

İkinci kısımda, bunun için iki ana modül, önerdiğiniz gibi Feeds ve Migrate .

Feed'ler ve Migrate arasındaki fark, Feeds'in içeriğin düzenli olarak içe aktarılması için oluşturulmuş olması, Migrate ise içeriğin bir yerden diğerine bir kerelik taşınması için oluşturulmuş olmasıdır. Migrate, mevcut verilerin güncellenmesini destekliyor, ancak her iki modülün de iyi bir şekilde desteklendiği göz önüne alındığında, eldeki görev için oluşturulmuş modülü kullanmak daha mantıklı - Feed'ler daha iyi bir eşleşmedir.

Her iki modülü de kendim kullandıktan sonra (Senkronizasyon için feed'ler, Taşıma için migrasyon) Feed'leri Migrate'dan daha dağınık bulmuyorum. Tüm sitelerin taşınması tek içerik türlerini içe aktarmaktan daha karmaşık olmasına rağmen, taşıma deneyimimde daha fazla özel kod gerektiriyor, bu yüzden karşılaştırmak zor.

4. Uzaktan depolama için özel modül, senkronizasyon + önbellekleme

Bu görevde yardımcı olabilecek bir dizi modül var.

Sen söz Web Hizmetleri Veri modülü ve diğerleri de söylediğim Veri modülü . Dikkate alınacak diğer bir seçenek Remote Entity API modülüdür . Tecrübelerimden sadece birinin Veri modülü olduğunu unutmayın.

  • Web Hizmetleri Veri modülünün henüz bir sürümü yoktur - bu kodun henüz kararlı olmadığını gösterebilir, API değişebilir vb. Varlık Alanı Sorgularını desteklemez (proje sayfasına göre) ve kod deposuna hızlı bir göz atmak, Views desteğine sahip olduğuna dair hiçbir kanıt göstermez - bu nedenle varlıkları görüntülemek için Görünümleri kullanamazsınız;

  • Veri modülü, tecrübelerime göre, bir tabloda verileri olan ve görünümlere göstermek isteyen geliştirici olmayanlara daha yöneliktir. Drupal 6 sürümünü kullanmak oldukça sinir bozucu buldum - o zamandan beri değişmiş olsa da;

  • Remote Entity API modülü oldukça umut verici geliyor - uzak varlıkların getirilmesini ve önbelleğe alınmasını destekliyor ve Views desteğine sahip. Yalnızca alfa sürümünde - API hala değişebilir. İlk bakışta Entity Field Query desteğine sahip görünmüyor ve yalnızca bir tür uzaktan hizmeti destekliyor, böylece kendi uygulamanızı uygulamak zorunda kalacaksınız.

Sonuç

Uzak depolama modüllerinden hiçbirinin Varlık Alanı Sorgularını desteklemediği göz önüne alındığında, gerçek varlıkları + feed'leri kullanmak size Drupal sitenizle en iyi entegrasyonu sağlayacak çözümdür.

Views desteği yeterliyse ve Varlık Alanı Sorguları aracılığıyla diğer modüllerle potansiyel entegrasyon konusunda endişelenmiyorsanız, Remote Entity API'sını kullanmanın bir yolu olabilir - ancak kendi uzak arayüzünüzü uygulamanız gerekir.


Mükemmel cevap! Feed'ler ve Migrate ile ilgili ekleyeceğim bir şey, Migrate'ın veri kümelerindeki öğeler ve veri kümeleri arasındaki referansları işlemek için güzel bir yolu olmasıdır. drupal.org/node/1013506
milesw

1
Views destekli Remote Entity API'sı ile ilgili ayarlamalar hakkında bir makale yazdım. Bkz. Uzak verileri Drupal 7'ye entegre etme ve Views'a maruz bırakma .
colan

0

Görüşler, kurallar, jetonlar, cruds kancalar, arama api ve kesinlikle güçlü sistem entegrasyonu gerekiyorsa, onlar düğüm olarak kabul edilemez, ancak veritabanında "varlık kimliği" ve kendi idiosyncrasy depolayan özel varlıklar olmalı ve "dış kimlik" ilişkisi ve "varlık özellikleri" içinde yer alan bilgi alma çağrıları ile. Son olarak, veri senkronizasyonu için seçtiğiniz araç ne olursa olsun, onu cron Kuyrukları ile işleyeceğim.

Sadece veri almak ve zamanında maruz gerekiyorsa daha iyi bir seçim harici veri almak için bir Arabirim sınıfı oluşturmak ve "Arayüzü Pazarları" yapısından bilgi almak bir Sınıf ile bu Arayüzü uygulamak olacağını düşünüyorum.

Saygılarımızla


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.