Come scrivere un modulo di servizio per Drupal 7 e Servizi 3.x?
Domanda
Può qualcuno si prega di fornire istruzioni su come scrivere un modulo di servizio semplice per i servizi 3.xe Drupal 7.x? Non riesco a trovare qualcuno che lavora con D7. Nulla! Basta una versione rielaborata di echo_service modulo farebbe!
Al link minimo favore, ad un esempio di lavoro. Grazie.
Soluzione
Oltre al link sopra, ecco qualche codice da un modulo che ho scritto che utilizza webservices. Sotto "struttura", il servizio dovrebbe essere attivato e un punto finale definito. È inoltre possibile impostare i tipi restituiti consentiti lì.
Quindi, se si definisce 'api' come endpoint e si desidera una matrice JSON, si farebbe una richiesta come yoursite.com/api/servicename/arg1/arg2.json. È possibile definire il nome del servizio in hook_services_resources.
<?php
// $Id$
/* * **********************************************************************************************
* @file
* Based on the RESTful API shell module http://drupal.org/node/1034540
*/
/* * *************************************************************************************************
* Include necessary files
*/
require_once (drupal_get_path('module', 'graph_data_api') . '/model/highchart_graph.php');
/* * *************************************************************************************************
* Implementation of hook_help().
* @see http://api.drupal.org/api/function/hook_help/6
*/
function graph_data_api_help($path, $arg) {
$msg = t('<p>Provides a API for graph data for use with Highcharts.</p>');
switch ($path) {
case 'admin/help#graph_data_api':
return $msg;
case 'admin/modules#description':
return $msg;
}
}
/* * *************************************************************************************************
* Implementation of hook_disable()
* @see http://api.drupal.org/api/function/hook_disable/6
*/
function graph_data_api_disable() {
cache_clear_all('services:methods', 'cache');
//eco_debug( '*** graph_data_api_disable() called!' );
}
/* * *************************************************************************************************
* Implementation of hook_enable()
* @see http://api.drupal.org/api/function/hook_enable/6
*/
function graph_data_api_enable() {
cache_clear_all('services:methods', 'cache');
//eco_debug( '*** graph_data_api_enable() called!' );
}
/* * *************************************************************************************************
* Implementation of hook_perm().
* @see http://api.drupal.org/api/function/hook_perm/6
*/
function graph_data_api_permission() {
return array(
'request graph data' => array(
'title' => t('Request graph data'),
'description' => t('Allows user to use the graph api for Highchart graphs'),
),
);
}
/* * *************************************************************************************************
* Access callback
* For now only view/retrieve is implemented and if the user is logged in, he gets access
*/
function _graph_data_api_graphdata_access($op) {
global $user;
$access = FALSE;
switch ($op) {
case 'view':
if ($user->uid) {
$access = TRUE;
}
break;
}
return $access;
}
/* * *************************************************************************************************
* Implementation of hook_services_resources().
* For now only retrieve with a GET request is implemented
*/
function graph_data_api_services_resources() {
return array(
'graphdata' => array(
'retrieve' => array('help' => 'Retrieves graphdata',
'callback' => '_graph_data_api_graphdata_retrieve',
'access callback' => '_graph_data_api_graphdata_access',
'access arguments' => array('view'),
'access arguments append' => FALSE,
'args' => array(
array('name' => 'parameters',
'type' => 'string',
'description' => 'The parameters that define requested data',
'source' => array('path' => '0'), // first argument in the url
'optional' => FALSE,
),
),
),
),
);
}
/* * *************************************************************************************************
* Callback for the retrieve resource
*/
function _graph_data_api_graphdata_retrieve($arg) {
$data = 'hello world';
return $data;
}