Почему этот сервис Drupal RESTful API не работает?

8

Я использую модуль Services в Drupal 7. Я хочу реализовать сервис, который позволит мне отправлять поисковый запрос через AJAX и получать массив, содержащий 5 верхних узлов (node idи title), которые слабо соответствуют названию. При подключении к http://example.com/api/ я получаю это сообщение

Конечная точка службы «поиск» была успешно настроена.

но при попытке перейти на что-то вроде http://example.com/api/search/Test я получаю 404.

rybosome
источник
1
Я предлагаю проверить RESTws , который будет частью ядра D8.
Кв Кв
Для будущих читателей рассмотрите возможность использования запросов HTTP POST и GET для извлечения данных из конечной точки. Многие конечные точки служб требуют запросов POST.
Дэвид Томас,

Ответы:

1

Позже попробую и попробую, когда читаю из другого урока, я делаю ресурс с отдыхом, мыло для меня невозможно в drupal, я пытаюсь, но безуспешно, вы можете скопировать и просмотреть страницу этого кода и изменить только имя пользовательского модуля и хуки.

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

попробуйте еще раз в вашем пути службы и успеха с http: //path.come/? q = webservice_server_rest / webservice_resources / string.json

Джонатан
источник
0

Если вы создали RESTful Resource с помощью модуля Services, то я думаю, что он будет ожидать ответа на HTTP-запросы в формате JSON, поэтому вы можете попробовать перейти к http://example.com/api/search/Test.json

TerryCB
источник
0

Попробуйте использовать этот модуль https://www.drupal.org/project/services_views . В настоящее время он имеет две функции: - Создание представления на основе ресурсов, создание отображения служб в представлении - Выполнение любого представления системы с помощью вызова ресурса представлений

улыбка
источник
0

в основном 404 не найдена ошибка

  1. Убедитесь, что конечная точка вашего сервиса

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

  2. какое тело ответа нужно отправить в правильном формате

3. заголовки контента установлены в application / json и называются Content-Type

ДЕВАРАЖ ДЖОНСОН
источник
0

Привет Первое, что вы должны сделать, это

ШАГ 1: создать пользовательский модуль и реализовать hook_services_resources()

ПРИМЕР:

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

ШАГ 2: перейти к

Структура -> Услуги

и включите свой модуль

ШАГ 3: отправка данных клиенту $ data - данные, отправленные клиенту, должны быть массивом

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

Распечатайте ответ, чтобы проверить, работает ли он нормально.

ПРОВЕРЬТЕ СПИСОК:

  1. проверьте любой вход в систему, включив модуль регистрации БД, позвоните в вашу службу.
  2. проверьте наличие любой синтаксической ошибки, поскольку этот файл вызывается только при вызове служб, пока вы не увидите никаких ошибок или предупреждений.
  3. распечатайте ответ и проверьте правильность передачи данных или нет.
  4. проверьте конец клиента, чтобы проверить.
ДЕВАРАЖ ДЖОНСОН
источник
0

Я тоже получал эту ошибку, и затем я понял, что мне нужно включить путь URL моей конечной точки службы и путь моего просмотра.

Первоначально я пробовал http: //my.local/events, но мне нужно было использовать http: //my.local/events/events (я назвал путь к конечной точке службы так же, как и мой View).

Эрик Джонсон
источник