Domanda

ho bisogno di usare Drupal come client per un servizio web, per l'estrazione dei dati e mostrarlo in una vista o come contenuto. (L'uso formato è JSON o di riposo).

Io uso un modulo Web Client Service in Drupal 7, ed il modulo Servizi in Drupal 6, ma non so come usarli. Ho letto la documentazione, ma non ottengo alcun risultato.

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


Una possibile soluzione: trovo un modulo chiamato viste XML ma questo modulo convertire solo i file XML .

Ora, io programing in questo modulo per convertire il JSON per XML.

In questo file: xml_views_plugin_query_xml.inc

In questa funzione: Esegui

Qualcuno ha un'altra soluzione?

È stato utile?

Soluzione

Drupal ha funzioni specifiche che possono aiutare con la comunicazione con un servizio web, e la gestione dell'input JSON.
Drupal 7 ha le seguenti funzioni:

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

Se ci sono alcune restrizioni sul numero di richieste che può essere fatto per il server Web, è possibile utilizzare le funzioni di Drupal per memorizzare nella cache il risultato ottenuto dal server Web:

Da notare che supporti Drupal più di una cache di bin, ei moduli possono utilizzare i propri bidoni della cache, quando necessario.
Supporti drupal anche articoli di cache che vengono rimossi automaticamente al colpo successivo cache (vedi la descrizione per il CACHE_TEMPORARY costante). Attuazione hook_flush_caches () , i moduli consentono agli utenti amministratori di pulire la cache utilizzata dal modulo quando il pulsante "Clear" sulla pagina "performance" viene cliccato, o qualsiasi volte al chiamate modulo drupal_flush_all_caches () .

In Drupal 7, i dati della cache per dati utilizzati frequentemente sono associati con una variabile statica trattato con drupal_static () . Quando i dati sono davvero spesso utilizzato quando si emettono la stessa pagina, viene utilizzato il 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 () .

Altri suggerimenti

Ogni volta che ho bisogno di consumare un webservice, ho appena creato una classe PHP basato intorno file_get_contents o arricciatura in combinazione con json_decode o simplexml_load_string .

La classe quindi viene letta in un modulo tramite una funzione getter che usi drupal_static , o il modello $static per Drupal 6.

Ho quindi utilizzare questo dentro i miei blocchi personalizzati, callback di menu, ecc, a seconda delle necessità.

Modifica

@ di kiamlaluno risposta è corretta e dimostra un modo per fare tutto questo tramite l'API di Drupal. Il motivo principale che non faccio questo è che io preferisco di astrarre la classe webservice in un modo che mi permette di usare in altre applicazioni. Ci sono vantaggi e svantaggi a questo, quindi pesare le opzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top