Menggunakan Drupal sebagai klien layanan web

8

Saya perlu menggunakan Drupal sebagai klien untuk layanan web, untuk mengekstraksi data dan menunjukkannya dalam tampilan atau sebagai konten. (Penggunaan format adalah JSON atau REST.)

Saya menggunakan modul Klien Layanan Web di Drupal 7, dan modul Layanan di Drupal 6, tetapi saya tidak tahu cara menggunakannya. Saya membaca dokumentasi tetapi saya tidak mendapatkan hasil apa pun.

Adakah yang bisa membantu dalam masalah ini, atau beri tahu saya cara menggunakan modul ini? Apakah ada modul lain untuk tujuan ini?


Solusi yang mungkin: Saya menemukan modul yang disebut XML VIEWS tetapi modul ini hanya mengkonversi file XML.

Sekarang, saya memprogram dalam modul ini untuk mengkonversi JSON ke XML.

Dalam file ini: xml_views_plugin_query_xml.inc

Dalam fungsi ini: Jalankan

Adakah yang punya solusi lain?

Dvex
sumber
Ada beberapa presentasi bagus tentang hal ini di austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Jawaban:

9

Drupal memiliki fungsi spesifik yang dapat membantu berkomunikasi dengan layanan web, dan menangani input JSON.
Drupal 7 memiliki fungsi-fungsi berikut:

Dengan fungsi-fungsi itu Anda dapat menulis modul khusus Anda sendiri untuk membuat permintaan ke situs yang mengimplementasikan layanan web.

Jika ada beberapa batasan tentang jumlah permintaan yang dapat dilakukan ke server web, Anda dapat menggunakan fungsi Drupal untuk men-cache hasil yang diperoleh dari server web:

Untuk memperhatikan bahwa Drupal mendukung lebih dari satu nampan cache, dan modul dapat menggunakan nampan cache mereka sendiri, bila perlu.
Drupal juga mendukung item cache yang secara otomatis dihapus pada gesekan cache berturut-turut (lihat deskripsi untuk konstanta CACHE_TEMPORARY ). Menerapkan hook_flush_caches () , modul memungkinkan pengguna administrator untuk membersihkan cache yang digunakan oleh modul ketika tombol "Clear" pada halaman "Performance" diklik, atau setiap kali modul memanggil drupal_flush_all_caches () .

Dalam Drupal 7, data cache untuk data yang sering digunakan dikaitkan dengan variabel statis yang ditangani dengan drupal_static () . Ketika data benar-benar sering digunakan saat mengeluarkan halaman yang sama, kode yang mirip dengan yang berikut ini digunakan:

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
  }
  $implementations = &$drupal_static_fast['implementations'];

  // …

  // Fetch implementations from cache.
  if (empty($implementations)) {
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    if ($implementations === FALSE) {
      $implementations = array();
    }
    else {
      $implementations = $implementations->data;
    }
  }

Kode ini adalah bagian dari module_implements () .

kiamlaluno
sumber
Apakah Anda mencoba drupal.org/project/wsclient ? Saya tertarik jika modul ini membantu implementasi klien
milkovsky
2

Setiap kali saya harus menggunakan layanan web, saya baru saja membuat kelas PHP berdasarkan file_get_contents atau curl bersamaan dengan json_decode atau simplexml_load_string .

Kelas kemudian diakses dalam modul melalui fungsi pengambil yang menggunakan drupal_static , atau $staticpola untuk Drupal 6.

Saya kemudian menggunakan ini di dalam blok khusus saya, panggilan balik menu, dll, sesuai kebutuhan.

EDIT

@ kiamlaluno jawaban benar dan menunjukkan cara untuk melakukan ini semua melalui API Drupal. Alasan utama saya tidak melakukan ini adalah karena saya lebih memilih untuk abstrak kelas layanan web dengan cara yang memungkinkan saya untuk menggunakannya di aplikasi lain. Ada kelebihan dan kekurangan untuk ini, jadi pertimbangkan pilihan Anda.

mpdonadio
sumber
Apakah itu berarti saya menjadwalkan untuk menggunakan data dari layanan web? Apakah ada solusi sebagai sitebuilder dengan modul?
Dvex
Maaf, tapi saya tidak mengerti apa yang Anda coba lakukan.
mpdonadio
Dengan kata lain, saya mencari solusi yang tidak melibatkan pemrograman. Solusi seperti pembangun situs dengan modul. Tetapi, jika dalam kasus saya melibatkan pemrograman saya perlu langkah-langkah untuk melakukannya.
Dvex
Bisakah Anda memberikan contoh kelas layanan web abstrak?
milkovsky