Usando Drupal como cliente de un servicio web

8

Necesito usar Drupal como cliente para un servicio web, para extraer datos y mostrarlos en una vista o como contenido. (El uso del formato es JSON o REST).

Uso un módulo de cliente de servicio web en Drupal 7 y el módulo de servicios en Drupal 6, pero no sé cómo usarlos. Leo la documentación pero no obtengo ningún resultado.

¿Alguien puede ayudarme en este tema o decirme cómo usar estos módulos? ¿Hay algún otro módulo para este propósito?


Una posible solución: encuentro un módulo llamado VIEWS XML pero este módulo solo convierte archivos XML.

Ahora, estoy programando en este módulo para convertir el JSON a XML.

En estos archivos: xml_views_plugin_query_xml.inc

En esta función: ejecutar

¿Alguien tiene otra solución?

Dvex
fuente
Hubo algunas buenas presentaciones sobre esto en austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Respuestas:

9

Drupal tiene funciones específicas que pueden ayudarlo a comunicarse con un servicio web y a manejar la entrada JSON.
Drupal 7 tiene las siguientes funciones:

Con esas funciones, puede escribir su propio módulo personalizado para realizar solicitudes a un sitio que implementa un servicio web.

Si hay algunas restricciones sobre la cantidad de solicitudes que se pueden hacer al servidor web, puede usar las funciones de Drupal para almacenar en caché el resultado obtenido del servidor web:

Para notar que Drupal admite más de un contenedor de caché, y los módulos pueden usar sus propios contenedores de caché, cuando sea necesario.
Drupal también admite elementos de caché que se eliminan automáticamente en el deslizamiento sucesivo de caché (consulte la descripción de la constante CACHE_TEMPORARY ). Implementando hook_flush_caches () , los módulos permiten a los usuarios administradores limpiar la memoria caché utilizada por el módulo cuando se hace clic en el botón "Borrar" en la página "Rendimiento", o cada vez que un módulo llama a drupal_flush_all_caches () .

En Drupal 7, los datos de caché para los datos de uso frecuente están asociados con una variable estática manejada con drupal_static () . Cuando los datos se usan con mucha frecuencia al generar la misma página, se usa un código similar al siguiente:

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

El código es parte de module_implements () .

kiamlaluno
fuente
¿Intentaste con drupal.org/project/wsclient ? Me interesa si este módulo ayuda con la implementación del cliente de ws
milkovsky
2

Cada vez que necesito consumir un servicio web, acabo de crear una clase PHP basada en file_get_contents o curl junto con json_decode o simplexml_load_string .

Luego se accede a la clase en un módulo a través de una función getter que usa drupal_static , o el $staticpatrón para Drupal 6.

Luego lo uso dentro de mis bloques personalizados, devoluciones de llamada de menú, etc., según sea necesario.

EDITAR

La respuesta de @ kiamlaluno es correcta y demuestra una forma de hacerlo a través de la API de Drupal. La razón principal por la que no hago esto es que prefiero abstraer la clase de servicio web de una manera que me permita usarla en otras aplicaciones. Hay ventajas y desventajas en esto, así que sopesa tus opciones.

mpdonadio
fuente
¿Eso significa que programo consumir datos del servicio web? ¿Existe una solución como creador de sitios con módulos?
Dvex
Lo siento, pero no entiendo lo que estás tratando de hacer.
mpdonadio
En otras palabras, busco una solución que no implique una programación. Una solución como un creador de sitios con módulos. Pero, si en mi caso involucra programación, necesito los pasos para hacerlo.
Dvex
¿Podría proporcionar un ejemplo de clase abstracta de servicio web?
milkovsky