Warum funktioniert diese RESTful-API für Drupal-Dienste nicht?


8

Ich verwende das Dienstemodul auf Drupal 7. Ich möchte einen Dienst implementieren, mit dem ich einen Suchbegriff über AJAX senden und ein Array erhalten kann, das die fünf wichtigsten Knoten (Knoten idund title) enthält, die lose mit dem Titel übereinstimmen. Beim Herstellen einer Verbindung zu http://example.com/api/ erhalte ich diese Nachricht

Services Endpoint "Suche" wurde erfolgreich eingerichtet.

Wenn ich jedoch versuche, zu etwas wie http://example.com/api/search/Test zu navigieren , erhalte ich eine 404.


1
Ich schlage vor, RESTws zu testen , die Teil des D8-Kerns sein werden.
kqw

Erwägen Sie für zukünftige Leser die Verwendung von HTTP POST vs GET-Anforderungen, um Daten vom Endpunkt abzurufen. Viele Service-Endpunkte erfordern POST-Anforderungen.
David Thomas

Antworten:


1

Später von Versuch und Versuch, wenn ich aus einem anderen Tutorial lese, mache ich eine Ressource mit Ruhe, Seife ist für mich in Drupal unmöglich, ich versuche, aber ohne Erfolg können Sie diesen Code kopieren und paginieren und nur den benutzerdefinierten Modulnamen und die Hooks ändern.

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

Versuchen Sie es erneut in Ihrem Servicepfad und Erfolg mit http: //path.come/? q = webservice_server_rest / webservice_resources / string.json


0

Wenn Sie mit dem Modul "Dienste" eine RESTful-Ressource erstellt haben, wird diese voraussichtlich auf HTTP-Anforderungen im JSON-Format antworten. Sie können daher versuchen, zu zu navigieren http://example.com/api/search/Test.json



0

Grundsätzlich wird 404 Fehler nicht gefunden

  1. Stellen Sie sicher, dass Ihr Service-Endpunkt ist

    http://example.com/api/search/ {Suchbegriff}

  2. Der zu sendende Antworttext ist im richtigen Format

3. Die Inhaltsheader sind auf application / json gesetzt und heißen Content-Type


0

Hallo, als erstes musst du tun

SCHRITT 1: Erstellen Sie ein benutzerdefiniertes Modul und implementieren Sie es hook_services_resources()

BEISPIEL:

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

SCHRITT 2: Gehen Sie zu

Struktur -> Dienstleistungen

und aktivieren Sie Ihr Modul

SCHRITT 3: Senden von Daten an den Client $ data - Daten, die an den Client gesendet werden, sollten Array sein

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

Drucken Sie die Antwort aus, um zu überprüfen, ob sie ordnungsgemäß funktioniert.

CHECKLISTE:

  1. Suchen Sie nach Anmeldungen, indem Sie das DB-Protokollierungsmodul aktivieren. Rufen Sie Ihren Dienst auf.
  2. Überprüfen Sie, ob Syntaxfehler vorliegen, da diese Datei nur aufgerufen wird, wenn Dienste aufgerufen werden. Bis dahin werden keine Fehler oder Warnungen angezeigt.
  3. Drucken Sie die Antwort aus und testen Sie, ob die Daten korrekt übergeben wurden oder nicht.
  4. Überprüfen Sie das Client-Ende, um zu überprüfen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.