Mengapa layanan Drupal ini RESTful API tidak berfungsi?

8

Saya menggunakan modul Layanan pada Drupal 7. Saya ingin menerapkan layanan yang memungkinkan saya untuk mengirimkan istilah pencarian melalui AJAX dan menerima array yang berisi 5 node (node iddan title) teratas yang secara longgar sesuai dengan judul. Saat menghubungkan ke http://example.com/api/ saya menerima pesan ini

Layanan "pencarian" Titik Akhir telah berhasil disiapkan.

tetapi ketika mencoba menavigasi ke sesuatu seperti http://example.com/api/search/Test , saya mendapatkan 404.

rybosome
sumber
1
Saya sarankan untuk memeriksa RESTws , yang akan menjadi bagian dari inti D8.
kqw
Untuk pembaca masa depan, pertimbangkan untuk menggunakan HTTP POST vs GET permintaan untuk mengambil data dari titik akhir. Banyak titik akhir layanan memerlukan permintaan POST.
David Thomas

Jawaban:

1

Kemudian coba dan coba, ketika membaca dari tutorial lain, saya membuat sumber daya dengan istirahat, sabun bagi saya tidak mungkin dalam drupal, saya coba tetapi tidak berhasil, Anda dapat menyalin dan halaman kode ini dan memodifikasi hanya nama modul kustom dan kait.

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

coba lagi di jalur layanan Anda dan sukses dengan http: //path.come/? q = webservice_server_rest / webservice_resources / string.json

Jonathan
sumber
0

Jika Anda membuat Sumber Daya TENANG dengan modul Layanan, maka saya yakin itu akan berharap untuk menanggapi permintaan HTTP dalam format JSON, karena itu Anda dapat mencoba menavigasi ke http://example.com/api/search/Test.json

TerryCB
sumber
0

Cobalah menggunakan modul ini https://www.drupal.org/project/services_views . Saat ini memiliki dua fitur: - Membuat sumber daya berbasis tampilan membuat tampilan Layanan dalam tampilan - Menjalankan semua tampilan sistem melalui panggilan sumber daya pandangan

tersenyum
sumber
0

pada dasarnya 404 tidak ditemukan kesalahan

  1. Pastikan titik akhir layanan Anda

    http://example.com/api/search/ {istilah pencarian}

  2. apa yang harus dikirim oleh badan tanggapan dalam format yang benar

3. header konten diatur ke aplikasi / json dan nama Content-Type

DEVARAJ JOHNSON
sumber
0

Hai Hal pertama yang harus Anda lakukan adalah

LANGKAH 1: buat modul khusus dan implementasikan hook_services_resources()

CONTOH:

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

LANGKAH 2: pergi ke

Struktur -> layanan

dan aktifkan modul Anda

LANGKAH 3: mengirim data ke klien $ data - data yang dikirim ke klien harus berupa array

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

cetak respons untuk memeriksa apakah berfungsi dengan baik.

PERIKSA DAFTAR:

  1. periksa apakah ada login dengan mengaktifkan modul logging DB panggilan layanan Anda.
  2. periksa kesalahan sintaksis karena file itu dipanggil hanya ketika layanan dipanggil sampai Anda tidak melihat kesalahan atau peringatan.
  3. cetak respons dan uji data yang melewati benar atau tidak.
  4. periksa ujung klien untuk memeriksa.
DEVARAJ JOHNSON
sumber
0

Saya mendapatkan kesalahan ini juga dan kemudian saya menyadari bahwa saya perlu menyertakan jalur titik akhir layanan saya dan jalur Tampilan saya di URL.

Awalnya saya mencoba http: //my.local/events tapi saya harus menggunakan http: //my.local/events/events (saya telah menyebutkan jalur endpoint layanan saya sama dengan My View).

Eric Johnson
sumber