Usando XMLRPC con Services
Services es un módulo que permite definir web services que responden a solicitudes usando diversos protocolos. Por default, viene con soporte para XMLRPC.
En este ejemplo, hay un proveedor de web services y un cliente de web services.
Proveedor
Supongamos que el proveedor del web service tenga el url http://webservice-provider.com
Luego de instalar el módulo services (y activar Services y XMLRPC Server) puede entrar al administrador, admin/build/services, para navegar por los services definidos por default.
Uno puede agregar más services, colocando un módulo adecuado en modules/services/services/.
Por ejemplo, si tengo un tipo de contenido llamado job:
modules/services/services/job_service/job_service.info
modules/services/services/job_service/job_service.module
Una vez definido, se puede probar en la lista de services que aparece en admin/build/services.
Cliente
En el cliente del web service, se puede probar el acceso al web service del proveedor con algo como:
Como se observa, xmlrpc() permite invocar al service job.all. El url es el del archivo xmlrpc.php localizado en el proveedor.
Si hubiera más argumentos, serán pasados en el mismo orden al método que atiende el service. En este caso, job_service_all().
En este ejemplo, hay un proveedor de web services y un cliente de web services.
Proveedor
Supongamos que el proveedor del web service tenga el url http://webservice-provider.com
Luego de instalar el módulo services (y activar Services y XMLRPC Server) puede entrar al administrador, admin/build/services, para navegar por los services definidos por default.
Uno puede agregar más services, colocando un módulo adecuado en modules/services/services/.
Por ejemplo, si tengo un tipo de contenido llamado job:
modules/services/services/job_service/job_service.info
name = Job Service description = Provides a job service package = Services - services dependencies[] = services core = 6.x
modules/services/services/job_service/job_service.module
/** * Implements hook_service */ function job_service_service() { return array( array( '#method' => 'job.all', '#callback' => 'job_service_all', '#return' => 'array', '#args' => array( array( '#name' => 'fields', '#type' => 'array', '#optional' => TRUE, '#description' => t('List of fields') ), array( '#name' => 'limit', '#type' => 'int', '#optional' => TRUE, '#description' => t('To limit result') ) ), '#help' => t('Returns a list of the trabajo content type nodes.'), '#access callback' => 'job_service_all_access' ) ); } /** * Callback */ function job_service_all($fields=array(), $limit=0) { $sql = "SELECT * FROM {node} WHERE type='job'"; if ($limit>0) { $sql .= " LIMIT $limit"; } $result = db_query($sql); $nodes = array(); while ($node = db_fetch_object($result)) { $nodes[] = services_node_load(node_load($node->nid), $fields); } return $nodes; } /** * Access Callback */ function job_service_all_access() { return TRUE; }
Una vez definido, se puede probar en la lista de services que aparece en admin/build/services.
Cliente
En el cliente del web service, se puede probar el acceso al web service del proveedor con algo como:
/** * Implemens hook_menu */ function misc_menu() { $items = array(); $items['misc/test'] = array( 'page callback' => 'misc_test', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function misc_test() { $items = xmlrpc('http://webservice-provider.com/xmlrpc.php', 'job.all'); pr($items); pr($openid_provider['url'].'xmlrpc.php'); return 'OK'; }
Como se observa, xmlrpc() permite invocar al service job.all. El url es el del archivo xmlrpc.php localizado en el proveedor.
Si hubiera más argumentos, serán pasados en el mismo orden al método que atiende el service. En este caso, job_service_all().
Comentarios
Publicar un comentario