Por que esta API RESTful dos serviços Drupal não está funcionando?


8

Estou usando o módulo Serviços no Drupal 7. Quero implementar um serviço que permita que eu envie um termo de pesquisa via AJAX e receba uma matriz contendo os 5 principais nós (nó ide title) que correspondem livremente ao título. Ao conectar- me a http://example.com/api/ , recebo esta mensagem

O ponto de extremidade de serviços "pesquisa" foi configurado com sucesso.

mas ao tentar navegar para algo como http://example.com/api/search/Test , recebo um 404.


11
Sugiro verificar RESTws , que fará parte do núcleo D8.
— kqw

Para futuros leitores, considere usar solicitações HTTP POST vs GET para recuperar dados do nó de extremidade. Muitos pontos de extremidade de serviços exigem solicitações POST.
— David Thomas

Respostas:


1

Mais tarde, tente e tente, quando lido em outro tutorial, eu crio um recurso com descanso, o sabão para mim é impossível em drupal, eu tento, mas sem sucesso, você pode copiar e paginar esse código e modificar apenas o nome do módulo personalizado e os ganchos.

/**
 * 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;
}

tente novamente em seu caminho de serviço e obtenha sucesso com http: //path.come/? q = webservice_server_rest / webservice_resources / string.json


0

Se você criou um Recurso RESTful com o módulo Serviços, acredito que ele espere responder a solicitações HTTP no formato JSON; portanto, você pode tentar navegar para http://example.com/api/search/Test.json


0

Tente usar este módulo https://www.drupal.org/project/services_views . Atualmente, ele possui dois recursos: - Criar recurso baseado em exibição, criando exibição de Serviços em uma exibição - Executar qualquer exibição do sistema através da chamada de recurso de exibição


0

basicamente 404 não foi encontrado erro

  1. Verifique se o ponto final do serviço está

    http://example.com/api/search/ {termo da pesquisa}

  2. qual é o corpo da resposta a ser enviado está no formato correto

3. os cabeçalhos de conteúdo são definidos como application / json e nome Content-Type


0

Oi A primeira coisa que você precisa fazer é

PASSO 1: crie um módulo personalizado e implemente hook_services_resources()

EXEMPLO:

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,
         ),
       ),
      ),
     ),
  );
}

PASSO 2: vá para

Estrutura -> serviços

e habilite seu módulo

PASSO 3: enviando dados para o cliente $ data - os dados enviados ao cliente devem ser de 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 a resposta para verificar se está funcionando bem.

LISTA DE CONTROLE:

  1. verifique qualquer logon ativando o módulo de log do DB, ligue para o seu serviço.
  2. verifique se há algum erro de sintaxe, porque esse arquivo é chamado apenas quando os serviços são chamados até então, você não vê nenhum erro ou aviso.
  3. imprima a resposta e teste se os dados estão passando corretamente ou não.
  4. verifique o fim do cliente para verificar.

0

Eu também estava recebendo esse erro e percebi que precisava incluir o caminho do meu ponto de extremidade de serviço e o caminho da minha Visualização no URL.

Originalmente, eu estava tentando http: //my.local/events, mas precisava usar http: //my.local/events/events (eu havia chamado o caminho do ponto de extremidade do serviço da mesma forma que o meu View).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.