为什么此Drupal服务RESTful API无法正常工作?


8

我正在Drupal 7上使用“服务”模块。我想实现一项服务,该服务允许我通过AJAX提交搜索词并接收一个数组,其中包含与标题松散匹配的前5个节点(node idtitle)。连接到http://example.com/api/时,我收到此消息

服务端点“搜索”已成功设置。

但是当尝试导航到类似http://example.com/api/search/Test之类的内容时,我得到了404。


1
我建议检查RESTws,它将成为D8核心的一部分。
kqw 2014年

对于将来的读者,请考虑使用HTTP POST与GET请求从端点检索数据。许多服务端点需要POST请求。
大卫·托马斯

Answers:


1

稍后再试,当从其他教程中读取内容时,我会充分利用资源,在drupal中无法使用肥皂。我尝试但没有成功,您可以复制和分页此代码,并仅修改自定义模块名称和挂钩。

/**
 * 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成功


0

如果您使用“服务”模块创建了RESTful资源,那么我相信它将期望以JSON格式响应HTTP请求,因此您可以尝试导航到 http://example.com/api/search/Test.json




0

嗨,您要做的第一件事是

步骤1:创建自定义模块并实施 hook_services_resources()

例:

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:前往

结构->服务

并启用您的模块

步骤3:将数据发送到客户端$ data-发送到客户端的数据应该是数组

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

打印响应以检查其是否正常。

检查清单:

  1. 通过启用数据库日志记录模块调用您的服务来检查是否有任何登录。
  2. 检查是否存在语法错误,因为仅在调用services时才调用该文件,直到您看不到任何错误或警告为止。
  3. 打印响应并测试数据是否正确传递。
  4. 检查客户端进行检查。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.