Bu Drupal hizmetleri RESTful API'si neden çalışmıyor?


8

Ben Drupal 7 Services modülünü kullanıyorum. AJAX aracılığıyla bir arama terimi göndermek ve başlık ile gevşek bir şekilde eşleşen ilk 5 düğümleri (düğüm idve title) içeren bir dizi almak için izin veren bir hizmet uygulamak istiyorum . Http://example.com/api/ adresine bağlanırken bu mesajı alıyorum

Services Endpoint "search" başarıyla kuruldu.

ancak http://example.com/api/search/Test gibi bir şeye gitmeye çalışırken 404 elde ederim.


1
D8 çekirdeğinin bir parçası olacak RESTws'a göz atmanızı öneririm .
kqw

Gelecekteki okuyucular için, uç noktadan veri almak için HTTP POST ve GET isteklerini kullanmayı düşünün. Birçok hizmet uç noktası POST isteği gerektirir.
David Thomas

Yanıtlar:


1

Daha sonra denemek ve denemek, diğer öğretici okurken, ben dinlenme ile bir kaynak yapmak, sabun benim için drupal imkansız, ben denemek ama başarı olmadan, bu kodu kopyalamak ve sayfa ve sadece özel modül adı ve kancaları değiştirebilirsiniz.

/**
 * 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 ile hizmet yolunuzda ve başarınızda tekrar deneyin


0

Hizmetler modülü ile RESTful bir Kaynak oluşturduysanız, HTTP isteklerine JSON biçiminde yanıt vermeyi bekleyeceğini düşünüyorum, bu nedenle http://example.com/api/search/Test.json



0

temelde 404 bulunamadı hatası

  1. Hizmet bitiş noktanızın

    http://example.com/api/search/ {arama terimi}

  2. gönderilecek yanıt gövdesi nedir doğru biçimde

3. içerik başlıkları application / json ve name Content-Type olarak ayarlanmıştır


0

Merhaba İlk yapmanız gereken şey

ADIM 1: Özel bir modül oluşturun ve uygulayın hook_services_resources()

MİSAL:

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.ADIM: gidin

Yapı -> hizmetler

ve modülünüzü etkinleştirin

ADIM 3: istemciye veri gönderme $ data - istemciye gönderilen veriler dizi olmalıdır

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

iyi çalışıp çalışmadığını kontrol etmek için yanıtı yazdırın.

KONTROL LİSTESİ:

  1. DB günlük kaydı modülünün hizmetinizi aramasını etkinleştirerek oturum açma olup olmadığını kontrol edin.
  2. sözdizimi hatası olup olmadığını kontrol edin, çünkü o zamana kadar servis çağrıldığında dosya herhangi bir hata veya uyarı görmez.
  3. yanıtı yazdırın ve verilerin doğru bir şekilde geçip geçmediğini test edin.
  4. kontrol etmek için müşteri sonunu kontrol edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.