使用Drupal使用RESTAPI

使用Drupal使用RESTAPI,rest,drupal,drupal-7,Rest,Drupal,Drupal 7,我目前正在维护一个Drupal7站点。虽然我已经在Drupal方面获得了一些经验,但我的知识水平仍然很低,并且仅限于安装和配置模块 我的网站几乎是一个元数据存储库。人们填写关于数据集的表格。 我的问题可能相当基本(或者可能不是——很难说)。 我需要实现一个外部文件存储库。数据存储库提供了一个RESTAPI,允许用户使用MyDrupal站点将文件上传到存储库 上传文件后,数据存储库将提供一个永久标识符,除了其他字段外,我还必须保存该标识符 现在,我正在寻找构建一个非常简单的UI的最佳方法,该UI允

我目前正在维护一个Drupal7站点。虽然我已经在Drupal方面获得了一些经验,但我的知识水平仍然很低,并且仅限于安装和配置模块

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

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

现在,我正在寻找构建一个非常简单的UI的最佳方法,该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论坛是我可以问这样一个问题的地方,但我对stackoverflow有更好的体验

我非常感谢你的帮助。
谢谢

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

很抱歉回答我的问题,但根据我从这里得到的信息: 我能解决这个问题

我编写了一个与API通信的定制drupal模块。 Drupal 7具有自己的https请求功能: 然而,这还不足以满足我的需要,因为我还需要传输数据,所以我最终使用了php库curl(),它正是为此目的而构建的。 基本上,您可以在服务器上安装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

下面是drupal中使用curl的rest调用的一个示例(基于这个答案)。请记住,使用“@”的语法已经过时,drupal会对此表示不满。在我的示例中,我使用了“newcurlfile”

我希望这对某人有帮助

编辑:我发布了一个有助于解决所述问题的模块:

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