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.

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

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

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

sorriso
fonte
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

DEVARAJ JOHNSON
fonte
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.
DEVARAJ JOHNSON
fonte
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).

Eric Johnson
fonte