¿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.

rybosome
fuente
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

Jonathan
fuente
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

TerryCB
fuente
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

sonrisa
fuente
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

DEVARAJ JOHNSON
fuente
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.
DEVARAJ JOHNSON
fuente
0

También recibí este error y luego me di cuenta de que necesitaba incluir la ruta de mi punto final de servicio y la ruta de mi Vista en la URL.

Originalmente estaba intentando http: //my.local/events pero necesitaba usar http: //my.local/events/events (había nombrado mi ruta de punto final de servicio igual que mi Vista).

Eric Johnson
fuente