Utilizzo di Drupal come client di un servizio Web


8

Devo usare Drupal come client per un servizio Web, per estrarre dati e mostrarli in una vista o come contenuto. (L'uso del formato è JSON o REST.)

Uso un modulo Client di servizi Web in Drupal 7 e il modulo Servizi in Drupal 6, ma non so come usarli. Ho letto la documentazione ma non ottengo alcun risultato.

Qualcuno può aiutare su questo problema o dirmi come utilizzare questi moduli? C'è qualche altro modulo per questo scopo?


Una possibile soluzione: trovo un modulo chiamato XML VIEWS ma questo modulo converte solo i file XML.

Ora sto programmando in questo modulo per convertire JSON in XML.

In questo file: xml_views_plugin_query_xml.inc

In questa funzione: eseguire

Qualcuno ha un'altra soluzione?


Ci sono state alcune buone presentazioni su questo al drupalcamp di austin (11): vimeo.com/33785095 vimeo.com/33091201
chrisjlee,

Risposte:


9

Drupal ha funzioni specifiche che possono aiutare a comunicare con un servizio Web e gestire l'input JSON.
Drupal 7 ha le seguenti funzioni:

Con queste funzioni è possibile scrivere il proprio modulo personalizzato per effettuare richieste a un sito che implementa un servizio web.

Se esistono alcune restrizioni sul numero di richieste che è possibile effettuare al server Web, è possibile utilizzare le funzioni Drupal per memorizzare nella cache il risultato ottenuto dal server Web:

Notare che Drupal supporta più di un cestino cache e che i moduli possono utilizzare i propri contenitori cache, se necessario.
Drupal supporta anche gli elementi della cache che vengono automaticamente rimossi al successivo scorrimento della cache (vedi la descrizione per la costante CACHE_TEMPORARY ). Implementando hook_flush_caches () , i moduli consentono agli utenti amministratori di pulire la cache utilizzata dal modulo quando si fa clic sul pulsante "Cancella" nella pagina "Prestazioni" o ogni volta che un modulo chiama drupal_flush_all_caches () .

In Drupal 7, i dati della cache per i dati utilizzati di frequente sono associati a una variabile statica gestita con drupal_static () . Quando i dati vengono utilizzati molto frequentemente durante l'output della stessa pagina, viene utilizzato un codice simile al seguente:

  // 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;
    }
  }

Il codice fa parte di module_implements () .


Hai provato drupal.org/project/wsclient ? Sono interessato se questo modulo aiuta con l'implementazione del client ws
milkovsky

2

Ogni volta che ho bisogno di consumare un servizio web, ho appena creato una classe PHP basata su file_get_contents o arricciata insieme a json_decode o simplexml_load_string .

Alla classe si accede quindi in un modulo tramite una funzione getter che utilizza drupal_static o il $staticmodello per Drupal 6.

Quindi lo uso all'interno dei miei blocchi personalizzati, richiamate di menu, ecc., Se necessario.

MODIFICARE

La risposta di @ kiamlaluno è corretta e dimostra un modo per farlo attraverso l'API Drupal. Il motivo principale per cui non lo faccio è che preferisco astrarre la classe webservice in un modo che mi permetta di usarla in altre applicazioni. Ci sono vantaggi e svantaggi in questo, quindi soppesare le opzioni.


Ciò significa che pianifico di consumare dati dal servizio web? Esiste una soluzione come sitebuilder con moduli?
Dvex, il

Mi dispiace, ma non capisco bene cosa stai cercando di fare.
mpdonadio

In altre parole, cerco una soluzione che non implichi una programmazione. Una soluzione come un costruttore di siti con moduli. Ma se nel mio caso si tratta di programmare ho bisogno dei passaggi per farlo.
Dvex,

Potresti fornire un esempio di classe di servizio web astratta?
milkovsky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.