我目前正在维护一个drupal 7网站。虽然我已经获得了一些Drupal方面的经验,但我的知识仍然很低,除了安装和配置模块之外,我的知识还不够深入。
我的站点基本上是一个元数据存储库。人们填写有关数据集的表格。我的问题可能是基本的(也许不是,很难说)。我需要实现一个外部文件存储库。数据存储库提供了一个REST,应该允许用户使用my站点将文件上传到他们的存储库。
上传文件之后,数据存储库提供了一个永久标识符,除了其他字段之外,我还必须保存该标识符。
现在,我正在寻找构建一个非常简单的UI的最佳方法,该UI允许用户在不离开我的drupal站点的情况下将他们的文件上传到存储库中(例如,当他们正在填写字段时)。我还需要自由地形成我自己需要作为API命令的URL,因为有许多选项需要声明。例如,我需要在我的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论坛上,我可以问这样一个问题,但我有更好的经验与堆叠溢出。
我很感谢你的帮助。谢谢
发布于 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安装也在服务器上运行。在您的自定义模块中的某个位置,最好是在配置菜单中,您可以使用以下内容检查安装是否成功:
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”。
$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
发布于 2015-12-11 15:35:57
是的,您可以使用Drupal实现好的REST服务,如果您正在使用drupal 7,尝试使用" services“MOdule,这将是您的项目的一个很好的起点,通过使用这个模块,您可以创建您自己的端点,并且可以将其他应用程序集成到这个端点。
https://stackoverflow.com/questions/34221461
复制相似问题