Dlaczego ten interfejs API RESTful usług Drupal nie działa?

8

Korzystam z modułu Usługi w Drupal 7. Chcę wdrożyć usługę, która pozwala mi przesłać wyszukiwane hasło przez AJAX i otrzymać tablicę zawierającą 5 najlepszych węzłów (węzeł idi title), które luźno pasują do tytułu. Podczas łączenia się z http://example.com/api/ otrzymuję tę wiadomość

Usługi „wyszukiwanie” punktu końcowego usług zostało pomyślnie skonfigurowane.

ale gdy próbuję przejść do czegoś takiego jak http://example.com/api/search/Test , dostaję 404.

rybosome
źródło
1
Proponuję sprawdzić RESTws , które będą częścią rdzenia D8.
kqw
W przypadku przyszłych czytelników rozważ użycie HTTP POST w porównaniu z żądaniami GET do pobierania danych z punktu końcowego. Wiele punktów końcowych usług wymaga żądań POST.
David Thomas

Odpowiedzi:

1

Później spróbuj i spróbuj, kiedy czytam z innego samouczka, tworzę zasób z resztą, mydło jest dla mnie niemożliwe w Drupal, próbuję, ale bez powodzenia, możesz skopiować i stronę tego kodu i zmodyfikować tylko niestandardową nazwę modułu i haki.

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

spróbuj ponownie na ścieżce usługi i odnieś sukces z http: //path.come/? q = webservice_server_rest / webservice_resources / string.json

jonathan
źródło
0

Jeśli utworzyłeś RESTful Resource za pomocą modułu Services, to sądzę, że będzie oczekiwać odpowiedzi na żądania HTTP w formacie JSON, dlatego możesz spróbować przejść do http://example.com/api/search/Test.json

TerryCB
źródło
0

Spróbuj użyć tego modułu https://www.drupal.org/project/services_views . Obecnie ma dwie funkcje: - Tworzenie usług tworzenia zasobów opartych na widoku Wyświetlanie w widoku - Wykonywanie dowolnego widoku systemu za pomocą wywołania zasobów widoku

uśmiech
źródło
0

w zasadzie 404 nie znaleziono błędu

  1. Upewnij się, że punktem końcowym usługi jest

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

  2. treść odpowiedzi, która ma zostać wysłana, ma prawidłowy format

3. nagłówki zawartości są ustawione na application / json i nazwa Content-Type

DEVARAJ JOHNSON
źródło
0

Cześć Pierwszą rzeczą, którą musisz zrobić, to

KROK 1: utwórz niestandardowy moduł i zaimplementuj hook_services_resources()

PRZYKŁAD:

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

KROK 2: przejdź do

Struktura -> usługi

i włącz swój moduł

KROK 3: wysyłanie danych do klienta $ dane - dane wysyłane do klienta powinny być tablicą

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

wydrukuj odpowiedź, aby sprawdzić, czy działa poprawnie.

SPRAWDŹ LISTĘ:

  1. sprawdź, czy nie logujesz się, włączając moduł rejestrowania DB.
  2. sprawdź, czy nie wystąpił błąd składniowy, ponieważ plik ten jest wywoływany tylko wtedy, gdy usługi są wywoływane, dopóki nie zobaczysz żadnego błędu ani ostrzeżenia.
  3. wydrukuj odpowiedź i sprawdź, czy dane są przekazywane poprawnie, czy nie.
  4. sprawdź koniec klienta, aby sprawdzić.
DEVARAJ JOHNSON
źródło
0

Ten błąd również występował, a potem zdałem sobie sprawę, że muszę podać zarówno ścieżkę punktu końcowego mojej usługi, jak i ścieżkę mojego widoku do adresu URL.

Początkowo próbowałem http: //my.local/events, ale musiałem używać http: //my.local/events/events (nazwa mojego punktu końcowego usługi była taka sama jak mój widok).

Eric Johnson
źródło