¿Por qué esta API RESTful de servicios de Drupal no funciona?


8

Estoy usando el módulo Servicios en Drupal 7. Quiero implementar un servicio que me permita enviar un término de búsqueda a través de AJAX y recibir una matriz que contenga los 5 nodos principales (nodo idy title) que coincidan libremente con el título. Cuando me conecto a http://example.com/api/ recibo este mensaje

La "búsqueda" de Endpoint de servicios se ha configurado correctamente.

pero cuando intento navegar a algo como http://example.com/api/search/Test , obtengo un 404.


1
Sugiero revisar RESTws , que formará parte del núcleo D8.
— kqw

Para futuros lectores, considere el uso de solicitudes HTTP POST vs GET para recuperar datos del punto final. Muchos puntos finales de servicios requieren solicitudes POST.
— David Thomas

Respuestas:


1

Más tarde, cuando lo leí en otro tutorial, hice un recurso con descanso, el jabón para mí es imposible en drupal, lo intento pero sin éxito, puede copiar y paginar este código y modificar solo el nombre y los ganchos del módulo personalizado.

/**
 * Implements hook_ctools_plugin_api().
 */
function core_custom_webservice_ctools_plugin_api($owner, $api) {
  if ($owner == 'services' && $api == 'services') {
    return array(
      'version' => 3,
      'file' => 'core_custom_webservice.services.inc'
    );
  }
}


function core_custom_webservice_services_resources() {
  $resources = array(
    'webservice_resources' => array(
      'operations' => array(
        'retrieve' => array(
          'help' => t('Response of webservice'),
          'file' => array('type' => 'inc', 'module' => 'core_custom_webservice', 'name' => 'core_custom_webservice.resource',),
          'callback' => '_core_custom_webservice_get_response',
          'access callback' => '_core_custom_webservice_access',
          'access arguments' => array('view'),
          'access arguments append' => TRUE,
          '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,
            ),
          ),
        ),
      ),
    ),
  );
  return $resources;
}

/* * *************************************************************************************************
 * Access callback 
 * For now only view/retrieve is implemented and if the user is logged in, he gets access
 */

function _core_custom_webservice_access($op) {
  global $user;
  $access = TRUE;

  switch ($op) {
    case 'view':
      if ($user->uid) {
        $access = TRUE;
      }
      break;
  }

  return $access;
}

function _core_custom_webservice_get_response($arg) {
  $response = 'something';
  return 'print '.$response;
}

intente nuevamente en su ruta de servicio y tenga éxito con http: //path.come/? q = webservice_server_rest / webservice_resources / string.json


0

Si creó un Recurso RESTful con el módulo Servicios, creo que esperará responder a las solicitudes HTTP en formato JSON, por lo tanto, podría intentar navegar a http://example.com/api/search/Test.json


0

Intente utilizar este módulo https://www.drupal.org/project/services_views . Actualmente tiene dos características: - Crear recursos basados ​​en la vista, crear Servicios mostrar en una vista - Ejecutar cualquier vista del sistema a través de la llamada de recursos de vistas


0

básicamente 404 no se encuentra error

  1. Asegúrese de que su punto final de servicio sea

    http://example.com/api/search/ {search-term}

  2. ¿Cuál es el cuerpo de respuesta a enviar en formato correcto?

3.el encabezado de contenido se establece en application / json y se nombra Content-Type


0

Hola lo primero que tienes que hacer es

PASO 1: cree un módulo personalizado e implemente hook_services_resources()

EJEMPLO:

function mymodule_services_resources() {
  return array(
    'search' => array(
      'create' => array(
        'help' => 'Search for a content',
        'file' => array('file' => 'inc', 'module' => 'your module name'),
        'callback' => '_function_to_call_when_this_service_is_called',
        'access callback' => 'user_access',
        'access arguments' => array('access content'),
        'access arguments append' => FALSE,
        'args' => array(
         array(
           'name' => 'data',
           'type' => 'struct',
           'description' => 'The id of the data to get',
           'source' => 'data',
           'optional' => FALSE,
         ),
       ),
      ),
     ),
  );
}

PASO 2: ve a

Estructura -> servicios

y habilita tu módulo

PASO 3: envío de datos al cliente $ data: los datos enviados al cliente deben ser una matriz

  $url = $base_url.'/api/search';
            $response = drupal_http_request($url, array(
                'headers' => array('Content-Type' => 'application/json', 'Accept' => 'application/json'),
               'method' => 'POST',
               'data' => json_encode($data),
               'max_redirects' => 0,
               )
             );

imprima la respuesta para verificar si funciona bien.

LISTA DE VERIFICACIÓN:

  1. compruebe si hay un inicio de sesión habilitando el módulo de registro de DB. Llame a su servicio.
  2. compruebe si hay algún error de sintaxis porque ese archivo se llama solo cuando se llama a los servicios hasta que no vea ningún error o advertencia.
  3. imprima la respuesta y pruebe que los datos están pasando correctamente o no.
  4. Verifique el extremo del cliente para verificar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.