使用Drupal作为Web服务的客户端


8

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

我在Drupal 7中使用了Web Service Client模块,而在Drupal 6中使用了Services模块,但是我不知道如何使用它们。我阅读了文档,但没有任何结果。

谁能解决这个问题,或者告诉我如何使用这些模块?还有其他用于此目的的模块吗?


一个可能的解决方案:我找到了一个名为XML VIEWS的模块,但是该模块仅转换XML文件。

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

在此文件中: xml_views_plugin_query_xml.inc

在此功能中:执行

有人有其他解决方案吗?


在奥斯汀(11)drupalcamp上有一些很好的演讲:vimeo.com/33785095 vimeo.com/33091201
chrisjlee 2012年

Answers:


9

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

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

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

请注意,Drupal支持多个缓存箱,模块在必要时可以使用自己的缓存箱。
Drupal还支持在连续的缓存轻扫时自动删除的缓存项(请参阅CACHE_TEMPORARY常量的说明)。通过实现hook_flush_caches(),这些模块允许管理员用户在单击“性能”页面上的“清除”按钮时或模块调用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()的一部分。


您尝试了drupal.org/project/wsclient吗?我有兴趣,如果这个模块WS客户端实现帮助
milkovsky

2

每次需要使用Web服务时,我都基于file_get_contentscurljson_decodesimplexml_load_string一起创建了一个PHP类。

然后通过使用drupal_static的getter函数或$staticDrupal 6 的模式在模块中访问该类。

然后,根据需要,在我的自定义块,菜单回调等内部使用它。

编辑

@kiamlaluno的答案是正确的,并演示了通过Drupal API做到这一点的方法。我不这样做的主要原因是,我更喜欢以允许我在其他应用程序中使用它的方式来抽象化webservice类。这样做有优点也有缺点,因此请权衡一下您的选择。


这是否意味着我计划使用Web服务中的数据?作为带有模块的sitebuilder,是否有解决方案?
Dvex 2012年

抱歉,但我不太了解您要做什么。
mpdonadio

换句话说,我搜索不涉及编程的解决方案。类似于带有模块的网站构建器的解决方案。但是,如果就我而言涉及编程,则需要执行此步骤。
Dvex 2012年

您能否提供一个抽象Web服务类的示例?
milkovsky 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.