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?
Respuestas:
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:
rawurlencode()
cadena -d.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:
El código es parte de module_implements () .
fuente
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
$static
patró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.
fuente