Tại sao dịch vụ Drupal API RESTful này không hoạt động?


8

Tôi đang sử dụng mô-đun Dịch vụ trên Drupal 7. Tôi muốn triển khai dịch vụ cho phép tôi gửi cụm từ tìm kiếm qua AJAX và nhận một mảng chứa 5 nút (nút idtitle) hàng đầu phù hợp với tiêu đề. Khi kết nối với http://example.com/api/ tôi nhận được thông báo này

Dịch vụ "tìm kiếm" Điểm cuối đã được thiết lập thành công.

nhưng khi cố gắng điều hướng đến một cái gì đó như http://example.com/api/search/Test , tôi nhận được 404.


1
Tôi đề nghị kiểm tra RESTws , đây sẽ là một phần của lõi D8.
kqw

Đối với những người đọc trong tương lai, hãy cân nhắc sử dụng các yêu cầu POST HTTP vs GET để lấy dữ liệu từ điểm cuối. Nhiều điểm cuối dịch vụ yêu cầu POST.
David Thomas

Câu trả lời:


1

Sau khi thử và thử, khi đọc từ hướng dẫn khác, tôi tạo tài nguyên với phần còn lại, xà phòng đối với tôi là không thể áp dụng được, tôi thử nhưng không thành công, bạn có thể sao chép và trang mã này và chỉ sửa đổi tên và móc mô-đun tùy chỉnh.

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

thử lại trong đường dẫn dịch vụ của bạn và thành công với http: //path.come/? q = webservice_server_rest / webservice_resource / string.json


0

Nếu bạn đã tạo Tài nguyên RESTful bằng mô-đun Dịch vụ, thì tôi tin rằng nó sẽ đáp ứng các yêu cầu HTTP ở định dạng JSON, do đó bạn có thể thử điều hướng đến http://example.com/api/search/Test.json


0

Hãy thử sử dụng mô-đun này https://www.drupal.org/project/service_view . Hiện tại nó có hai tính năng: - Tạo dịch vụ tạo tài nguyên dựa trên chế độ xem Hiển thị trong một chế độ xem - Thực hiện bất kỳ chế độ xem nào của hệ thống thông qua cuộc gọi tài nguyên xem


0

về cơ bản 404 không tìm thấy lỗi

  1. Đảm bảo rằng điểm cuối dịch vụ của bạn là

    http://example.com/api/search/ {thuật ngữ tìm kiếm}

  2. cơ quan phản hồi được gửi có định dạng chính xác là gì

3. các tiêu đề nội dung được đặt thành application / json và đặt tên Content-Type


0

Xin chào, điều đầu tiên bạn phải làm là

BƯỚC 1: tạo mô-đun tùy chỉnh và thực hiện hook_services_resources()

THÍ DỤ:

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

BƯỚC 2: đi đến

Cấu trúc -> dịch vụ

và kích hoạt mô-đun của bạn

BƯỚC 3: gửi dữ liệu đến máy khách $ data - dữ liệu được gửi tới máy khách nên là mảng

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

in phản hồi để kiểm tra nếu nó hoạt động tốt.

DANH MỤC:

  1. kiểm tra mọi đăng nhập bằng cách kích hoạt mô đun ghi nhật ký DB gọi dịch vụ của bạn.
  2. kiểm tra bất kỳ lỗi cú pháp nào vì tệp đó chỉ được gọi khi dịch vụ được gọi cho đến khi đó bạn sẽ không thấy bất kỳ lỗi hoặc cảnh báo nào.
  3. in phản hồi và kiểm tra dữ liệu có truyền đúng hay không.
  4. kiểm tra kết thúc của khách hàng để kiểm tra.

0

Tôi cũng đã nhận được lỗi này và sau đó tôi nhận ra rằng tôi cần bao gồm cả đường dẫn của điểm cuối dịch vụ của tôi và đường dẫn của Chế độ xem của tôi trong URL.

Ban đầu tôi đã thử http: //my.local/events nhưng tôi cần sử dụng http: //my.local/events/events (Tôi đã đặt tên đường dẫn điểm cuối dịch vụ của mình giống như Chế độ xem của tôi).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.