使用 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
我目前正在维护一个 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