我需要将Drupal用作Web服务的客户端,提取数据并在视图或内容中显示数据。 (格式使用是JSON或REST。)

我用一个 Web服务客户端 Drupal 7中的模块, 服务 Drupal 6中的模块,但我不知道如何使用它们。我阅读了文档,但没有任何结果。

谁能在这个问题上提供帮助,或者告诉我如何使用这些模块?还有其他用于此目的的模块吗?


一个可能的解决方案:我找到一个称为的模块 XML视图 但是此模块仅转换XML文件。

现在,我在此模块中编程以将JSON转换为XML。

在此文件中: xml_views_plugin_query_xml.inc

在此功能中: 执行

有人有其他解决方案吗?

有帮助吗?

解决方案

Drupal具有特定的功能,可以帮助与Web服务交流并处理JSON输入。
Drupal 7具有以下功能:

使用这些功能,您可以编写自己的自定义模块,以向实现Web服务的站点提出请求。

如果对Web服务器的请求数量有一些限制,则可以使用Drupal功能来缓存从Web服务器获得的结果:

要注意,Drupal支持多个缓存箱,并且在必要时模块可以使用自己的缓存箱。
Drupal支持还可以在连续的缓存滑动处自动删除的缓存项(请参阅描述的描述 cache_temporary 持续的)。实施 hook_flush_caches(), ,这些模块允许管理员用户清洁当单击“ performance”页面上的“ clear”按钮或模块调用的任何时间时,都可以清洁模块使用的缓存。 drupal_flush_all_caches().

在Drupal 7中,用于常用数据的缓存数据与处理的静态变量关联 drupal_static(). 。当输出同一页面时确实经常使用数据时,使用类似于以下数据的代码:

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
  }
  $implementations = &$drupal_static_fast['implementations'];

  // …

  // Fetch implementations from cache.
  if (empty($implementations)) {
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    if ($implementations === FALSE) {
      $implementations = array();
    }
    else {
      $implementations = $implementations->data;
    }
  }

该代码是 module_implements().

其他提示

每次我需要消费Web服务时,我都刚刚创建了一个基于PHP类 file_get_contents 或者 卷曲 和这个结合 JSON_DECODE 或者 Simplexml_load_string.

然后,该类通过使用的Getter函数在模块中访问 drupal_static, , 或者 $static Drupal 6的模式。

然后,我根据需要在自定义块,菜单回调等内使用此功能。

编辑

@kiamlaluno的答案是正确的,并展示了一种通过Drupal API进行操作的方法。我不这样做的主要原因是,我更喜欢以使我可以在其他应用程序中使用它的方式来抽象网络服务类。这是有优势和缺点,因此请权衡您的选择。

许可以下: CC-BY-SA归因
scroll top