首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Drupal使用rest

使用Drupal使用rest
EN

Stack Overflow用户
提问于 2015-12-11 10:36:18
回答 2查看 2.1K关注 0票数 0

我目前正在维护一个drupal 7网站。虽然我已经获得了一些Drupal方面的经验,但我的知识仍然很低,除了安装和配置模块之外,我的知识还不够深入。

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

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

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

我已经做了一些研究,发现了如下模块:

代码语言:javascript
运行
复制
https://www.drupal.org/project/wsclient
https://www.drupal.org/project/chr
https://www.drupal.org/project/rest_client

或以下主题:

代码语言:javascript
运行
复制
http://drupal.stackexchange.com/questions/42103/how-do-i-consume-rest-as-a-client

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

然而,我仍然无法找到最好的策略是如何实现这一点。我需要的是关于什么是最好的方法的建议。目前我不知道我在找什么。

此外,我也意识到,在drupal论坛上,我可以问这样一个问题,但我有更好的经验与堆叠溢出。

我很感谢你的帮助。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-04 08:21:06

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

我编写了一个与API通信的自定义drupal模块。Drupal 7为https请求提供了自己的功能:然而,request/7.x不足以满足我的需要,因为我也需要传输数据,所以我最终使用了php库curl (https://curl.haxx.se/),它正是为此目的而构建的。基本上,您在您的服务器上安装curl,您的drupal安装也在服务器上运行。在您的自定义模块中的某个位置,最好是在配置菜单中,您可以使用以下内容检查安装是否成功:

代码语言:javascript
运行
复制
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中调用rest的一个例子(基于这个答案how to upload file using curl with php)。请记住,使用“@”的语法已经过时,drupal会抱怨它。在我的例子中,我使用了“新CURLFile”。

代码语言:javascript
运行
复制
$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

票数 0
EN

Stack Overflow用户

发布于 2015-12-11 15:35:57

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34221461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档