使用 Drupal 休息 api

Consuming a rest api with Drupal

我目前正在维护一个 drupal 7 站点。尽管我已经获得了一些使用 Drupal 的经验,但我的知识仍然相当低级,并且没有超出安装和配置模块的范围。

我的站点几乎是一个元数据存储库。人们填写有关数据集的表格。 我的问题可能相当基本(或者可能不是 - 很难说)。 我需要实现一个外部文件存储库。数据存储库提供了一个 REST API,应该允许用户使用我的 drupal 站点将文件上传到他们的存储库。

上传文件后,数据存储库会提供一个永久标识符,除了其他字段外,我还必须保存该标识符。

现在我正在寻找构建一个非常简单的 UI 的最佳方法,它允许用户将他们的文件上传到存储库而无需离开我的 drupal 站点(例如,当他们正在填写田野)。我还需要自由形成自己需要的 URL 作为 API 的命令,因为有许多选项需要声明。例如,我需要在我的 URL 中提供特定标记,以便数据存储库能够识别上传者。

我已经做了一些研究并找到了如下模块:

https://www.drupal.org/project/wsclient
https://www.drupal.org/project/chr
https://www.drupal.org/project/rest_client

或这些主题:

http://drupal.stackexchange.com/questions/42103/how-do-i-consume-rest-as-a-client

https://www.drupal.org/node/1114312

但是,我仍然无法找出实现它的最佳策略。 我需要的是有关最佳方法的提示。 目前我真的不知道我在找什么。

我也意识到我可以在 drupal 论坛上提出这样的问题,但我对 Whosebug 有更好的体验。

如有任何帮助,我将不胜感激。 谢谢

是的,您可以使用 Drupal 实现不错的 REST API 服务,如果您使用的是 drupal 7,请尝试使用 "Services" 模块,这将是您项目的一个很好的起点,通过使用此模块,您可以创建您自己的端点,您可以将其他应用程序集成到该端点。

很抱歉回答我自己的问题,但根据我从这里获得的信息: https://drupal.stackexchange.com/questions/42103/how-do-i-consume-rest-as-a-client 我能够解决问题。

我编写了一个与 API 通信的自定义 drupal 模块。 Drupal 7 自带 https 请求功能: https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_http_request/7.x 但是,这还不足以满足我的需求,因为我还需要传输数据,所以我最终使用了 php 库 curl (https://curl.haxx.se/),它正是为此目的而构建的。 基本上,您在您的服务器上安装 curl,您的 drupal 安装也在 运行 上。在自定义模块的某处,最好是在配置菜单中,您可以使用如下方式检查安装是否成功:

function _is_curl_installed() {
  if  (in_array  ('curl', get_loaded_extensions())) {
    return true;
  }
  else {
    return false;
  }
}

if (_is_curl_installed()) {
  drupal_set_message(t('Curl is installed.'));
} else {
  drupal_set_message(t('Curl is NOT installed.'), 'error');
}

Drupal 应该可以在安装后自动识别 curl。

这里是一个使用 curl 在 drupal 中进行 rest 调用的示例(基于此答案 how to upload file using curl with php)。请记住,使用“@”的语法已经过时,drupal 会抱怨它。在我的示例中,我使用了 "new CURLFile".

$request = curl_init($deposit_url);
curl_setopt($request, CURLOPT_POST, true);
$cfile = new CURLFile($file_realpath,'application/octet-stream', $base_file_name);
curl_setopt(
  $request,
  // the content of the array depends on the API you are communicating with
  CURLOPT_POSTFIELDS,
  array(
    'file' => $cfile,
    'access_token' => $temp_token,
    'verify' => false,
  ));


 curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
 $output= curl_exec($request);
 // output the response
 // drupal_set_message(t('The curl output [1] is '.$output));
 curl_close($request);

希望对大家有所帮助。

编辑:我发布了一个解决所描述问题的贡献模块: https://www.drupal.org/project/b2share