Чому цей API RESTful для Drupal не працює?


8

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

Служба "Пошук" Кінцевої точки успішно налаштована.

але при спробі перейти на щось на зразок http://example.com/api/search/Test , я отримую 404.


1
Я пропоную перевірити RESTws , який буде частиною ядра D8.
kqw

Для майбутніх читачів розгляньте можливість використання запитів HTTP POST проти GET для отримання даних з кінцевої точки. Багато кінцевих точок служби вимагають POST-запитів.
Девід Томас

Відповіді:


1

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

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


0

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


0

в основному 404 помилку не знайдено

  1. Переконайтеся, що кінцевою точкою послуги є

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

  2. що орган відповіді, який потрібно надіслати, є у правильному форматі

3.Заголовки вмісту встановлюються на додаток / 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 (я назвав шлях до кінцевої точки служби таким же, як і в My View).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.