Apa cara yang paling dapat diandalkan dan toleran terhadap kesalahan untuk mengintegrasikan struktur data pihak ketiga melalui layanan web di Drupal 7?


8

Saya telah melihat sejumlah strategi untuk mengintegrasikan struktur data jarak jauh di Drupal. Strategi-strategi tersebut tampaknya berkembang ketika modul-modul tertentu telah stabil dan kasus penggunaan telah dicoba.

Bayangkan kita memiliki struktur data "Pasar Petani" yang diwakili oleh sejumlah tipe data (pasar, market_hours, penjual, kios, produksi) dll yang terpapar melalui REST API. ID untuk layanan eksternal perlu dihubungkan di Drupal, yaitu ketika memuat "pasar" kami ingin mengambil data dari 'market_hours' dan 'stall'. Apa cara terbaik untuk menyatakan bahwa sebagai konten hanya baca di Drupal yang disinkronkan secara teratur?

Saya mencoba mengevaluasi ini dengan kriteria berikut:

Struktur Data di Drupal:

Node vs Entitas Kustom

Sejumlah skenario yang melibatkan layanan web yang saya lihat menggunakan entitas khusus. Ini menyederhanakan operasi CRUD. Namun, barang-barang ini akan menjadi "konten" karena akan dilihat secara publik.

Penyimpanan (Lokal vs Remote):

Saya telah melihat beberapa contoh di mana layanan dimuat sebagai entitas jarak jauh, di mana modul ini membuat perpustakaan untuk: https://drupal.org/project/wsdata . Ini terdengar paling menarik, tetapi belum melihat banyak kasus penggunaan. Ada juga contoh kode khusus: https://drupal.org/sandbox/fago/1493180

Menyinkronkan Data:

Umpan vs Migrasikan vs Guzzle vs 'Klien Layanan Web' vs 'Data Layanan Web'

Ada sejumlah opsi. Umpan sekarang mendukung entitas. Migrasi tampaknya jauh lebih bersih daripada umpan, terutama untuk skenario khusus. Saya juga melihat orang menggunakan klien guzzle untuk mengambil sinkronisasi dengan layanan jarak jauh: http://drupalcode.org/project/ckan.git/blob/refs/heads/ckan_dgu_7.x-1.x:/ckan.drush. inc # l273 . Saya juga memperhatikan modul WS Client https://drupal.org/project/wsclient menyediakan opsi yang telah dibuat khusus sebagai klien sisanya. Data Layanan Web memuat langsung dari layanan dan menyimpannya secara lokal.

Terima kasih atas pemikirannya.


Saya tidak yakin ada yang bisa memberi Anda jawaban pasti tentang apa itu solusi yang paling dapat diandalkan dan toleran kesalahan untuk kasus penggunaan spesifik Anda.
rooby

Modul "data" adalah kemungkinan lain, yang dapat digunakan bersama dengan modul feed (saat ini membutuhkan solusi dalam masalah ini - drupal.org/node/1033202 )
rooby

Menggunakan modul data hanya akan memungkinkan kita untuk menyimpan data dalam tabel individual. Ini akan baik-baik saja untuk membuat daftar melalui tampilan tetapi tidak mengizinkan kami untuk menggunakan manfaat dari sistem entitas (apakah node atau entitas kustom).
acouch

Ya, modul data memiliki data_entity submodule, yang membuat entitas dari semua item data Anda.
rooby

Jawaban:


16

1. Merumuskan kembali pertanyaan

Contoh Anda menunjukkan bahwa data hanya dibaca di sisi Drupal, dengan sinkronisasi satu arah saja. Saya pikir ini adalah faktor yang paling penting untuk dipertimbangkan di sini, karena pada dasarnya solusi apa pun yang Anda terapkan akan menjadi varian penyimpanan jauh, sinkronisasi dan caching lokal - bahkan jika caching lokal akhirnya menjadi entitas dalam database Drupal.

Jadi pertanyaannya, daripada menjadi "penyimpanan lokal vs penyimpanan jauh" akan menjadi:

  • Jika Anda menyimpan data secara lokal sama sekali;
  • Jika Anda menyimpan data sebagai entitas aktual, dan menggunakan Umpan (atau serupa) untuk menyinkronkan data secara teratur; ATAU
  • Jika Anda menggunakan modul yang dibuat khusus yang menyediakan sinkronisasi dan caching.

Artikel yang mungkin menarik bagi Anda adalah " Entitas Jarak Jauh di Drupal 7 ".

2. Caching data

Secara umum, caching data adalah ide yang baik:

  • Anda terlindungi dari pemadaman layanan lain, atau batas waktu dalam koneksi;

  • Memiliki data Anda hadir dalam database Drupal Anda akan mempercepat operasi;

  • Memiliki data Anda hadir dalam database Drupal Anda akan berarti bahwa Anda lebih mungkin untuk mendapatkan integrasi dengan modul lain, seperti Views (meskipun ini tidak dijamin).

Satu-satunya keuntungan dari tidak melakukan caching data adalah Anda tidak pernah mendapatkan data basi, yang dalam beberapa kasus lebih disukai - kadang-kadang lebih baik untuk tidak menampilkan data daripada data basi. Saya tidak melihat ini sebagai manfaat dalam contoh yang Anda berikan, jadi saya akan memfokuskan jawaban ini pada solusi yang melibatkan caching lokal.

3. Entitas lokal + Sinkronisasi

Jika Anda memilih opsi memiliki entitas lokal dan menyinkronkannya sendiri, maka kami kembali ke pertanyaan awal Anda:

  • Jika Anda menggunakan node atau entitas khusus;

  • Modul mana yang terbaik untuk sinkronisasi.

3,1 Nodes vs entitas Kustom

  • Definisi apa sebenarnya sebuah simpul adalah definisi yang cukup terbuka. The halaman dokumentasi pada node menunjukkan bahwa node "postingan" yang "disimpan" di situs Anda - baik yang berlaku untuk data Anda;

  • Sebagai pengembang Drupal saya berharap bahwa jika sesuatu adalah sebuah node maka saya harus dapat memanipulasinya di situs itu sendiri;

  • Sebagai pengguna Drupal, saya juga berharap bahwa node dapat diedit;

  • Masalah Drupal 8 ini https://drupal.org/node/2019031 menyarankan bahwa konsep "hanya baca" adalah konsep yang akan berlaku di tingkat entitas, bukan pada tingkat bundel. Jika ini pernah diterapkan Anda akan mendapat manfaat dari itu karena telah menempuh rute ini.

Untuk meringkas: data Anda hanya dibaca dan disimpan dari jarak jauh , lebih masuk akal untuk menggunakan jenis entitas khusus untuk mewakili data Anda.

3.2 Sinkronisasi

Untuk bagian kedua, dua modul utama untuk ini adalah, seperti yang Anda sarankan, Umpan dan Migrasi .

Perbedaan antara Umpan dan Migrasi adalah bahwa Umpan dibuat untuk mengimpor konten secara teratur, sedangkan Migrasi dibuat untuk porting konten satu kali dari satu tempat ke tempat lain. Migrasi mendukung pembaruan data yang ada, namun mengingat kedua modul didukung dengan baik, lebih masuk akal untuk menggunakan modul yang dibuat untuk tugas yang sedang dikerjakan - Umpan lebih cocok.

Setelah menggunakan kedua modul itu sendiri (Umpan untuk sinkronisasi, Migrasi untuk migrasi) Saya tidak menemukan Feed lebih berantakan daripada Migrasi. Migrasikan memerlukan lebih banyak kode khusus dalam pengalaman saya, meskipun memigrasikan seluruh situs lebih kompleks daripada mengimpor tipe konten tunggal, jadi sulit untuk membandingkan.

4. Modul khusus untuk penyimpanan jarak jauh, sinkronisasi + caching

Ada sejumlah modul di luar sana yang dapat membantu tugas ini.

Anda menyebutkan modul Data Layanan Web , dan yang lain menyebutkan modul Data . Opsi lain untuk dipertimbangkan adalah modul Remote Entity API . Perhatikan bahwa satu-satunya yang saya alami adalah modul Data.

  • Modul Data Layanan Web belum memiliki rilis - yang mungkin menunjukkan kode belum stabil, API mungkin berubah dan sebagainya. Itu tidak mendukung Kueri Bidang Entitas (sesuai dengan halaman proyeknya), dan penelusuran cepat dari repositori kode tidak menunjukkan bukti bahwa ia memiliki dukungan Tampilan - sehingga Anda tidak akan dapat menggunakan Tampilan untuk menampilkan entitas Anda;

  • Modul Data lebih berorientasi, menurut pengalaman saya, terhadap non-pengembang yang memiliki data dalam tabel dan ingin mengeksposnya ke tampilan. Saya telah menemukan versi Drupal 6 cukup frustasi untuk digunakan - meskipun itu mungkin telah berubah sejak saat itu;

  • Modul Remote Entity API kedengarannya cukup menjanjikan - mendukung pengambilan dan caching entitas jauh, dan memiliki dukungan Views. Ini hanya pada rilis alpha - jadi API mungkin masih berubah. Pada pandangan pertama sepertinya tidak memiliki dukungan Entity Field Query, dan hanya mendukung satu jenis layanan jarak jauh sehingga Anda harus menerapkan sendiri.

Kesimpulan

Mengingat bahwa tidak ada modul penyimpanan jarak jauh yang mendukung Kueri Bidang Entitas, menggunakan entitas + umpan aktual adalah solusi yang akan memberi Anda integrasi terbaik dengan situs Drupal Anda.

Jika dukungan Views sudah cukup, dan Anda tidak khawatir tentang potensi integrasi dengan modul lain melalui Kueri Bidang Entitas, maka menggunakan API Entitas Jarak Jauh mungkin merupakan cara yang harus dilakukan - Anda perlu mengimplementasikan antarmuka jarak jauh Anda sendiri.


Jawaban bagus! Satu hal yang akan saya tambahkan tentang Umpan vs. Migrasikan adalah bahwa Migrasi memiliki cara yang bagus untuk menangani referensi antara item dalam dataset dan seluruh dataset. drupal.org/node/1013506
milesw

1
Saya baru saja menulis sebuah artikel tentang pengaturan segalanya dengan Remote Entity API dengan dukungan Views. Lihat Mengintegrasikan data jarak jauh ke dalam Drupal 7 dan memaparkannya ke Views .
colan

0

Jika Anda memerlukan pandangan, aturan, token, kait cruds, api pencarian dan integrasi sistem yang jelas kuat dalam pendapat saya mereka tidak dapat dianggap node tetapi mereka harus entitas kustom dengan keistimewaan mereka sendiri menyimpan dalam database "entitas id" dan Hubungan "id eksternal" dan dengan panggilan informasi pengambilan yang dienkapsulasi dalam "properti entitas". Akhirnya, apa pun alat yang Anda pilih untuk menyinkronkan data, saya akan memprosesnya dengan cron Queues.

Jika Anda hanya perlu mengambil dan mengekspos data tepat waktu, saya pikir pilihan yang lebih baik adalah membuat kelas Interface untuk mengambil data eksternal dan mengimplementasikan Antarmuka ini dengan Kelas yang mengambil info dari struktur "Pasar Pasar" Anda.

Salam


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.