Usando o Drupal como cliente de um serviço da web

8

Preciso usar o Drupal como cliente para um serviço da Web, para extrair dados e mostrá-los em uma exibição ou como conteúdo. (O formato utilizado é JSON ou REST.)

Eu uso um módulo Cliente de Serviço da Web no Drupal 7 e o módulo Serviços no Drupal 6, mas não sei como usá-los. Li a documentação, mas não obtive nenhum resultado.

Alguém pode ajudar nessa questão ou me dizer como usar esses módulos? Existe algum outro módulo para esse fim?


Uma solução possível: encontro um módulo chamado XML VIEWS, mas este módulo converte apenas arquivos XML.

Agora, estou programando neste módulo para converter o JSON em XML.

Nestes arquivos: xml_views_plugin_query_xml.inc

Nesta função: Execute

Alguém tem outra solução?

Dvex
fonte
Houve algumas boas apresentações sobre isso em austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Respostas:

9

O Drupal possui funções específicas que podem ajudar na comunicação com um serviço da Web e no tratamento da entrada JSON.
O Drupal 7 tem as seguintes funções:

Com essas funções, você pode escrever seu próprio módulo personalizado para fazer solicitações a um site que implemente um serviço da Web.

Se houver algumas restrições sobre o número de solicitações que podem ser feitas ao servidor da web, você poderá usar as funções do Drupal para armazenar em cache o resultado obtido no servidor da web:

Observe que o Drupal suporta mais de uma bandeja de cache e os módulos podem usar suas próprias caixas de cache, quando necessário.
O Drupal também suporta itens de cache que são removidos automaticamente com o furto sucessivo de cache (consulte a descrição para a constante CACHE_TEMPORARY ). Implementando hook_flush_caches () , os módulos permitem que os usuários administradores limpem o cache usado pelo módulo quando o botão "Limpar" na página "Desempenho" é clicado ou sempre que um módulo chama drupal_flush_all_caches () .

No Drupal 7, os dados de cache dos dados usados ​​com frequência estão associados a uma variável estática tratada com drupal_static () . Quando os dados são realmente usados ​​com frequência na saída da mesma página, um código semelhante ao seguinte é usado:

  // 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;
    }
  }

O código faz parte de module_implements () .

kiamlaluno
fonte
Você tentou drupal.org/project/wsclient ? Estou interessado se este módulo ajuda com ws implementação do cliente
milkovsky
2

Toda vez que preciso consumir um serviço da web, acabei de criar uma classe PHP baseada em file_get_contents ou enrolar em conjunto com json_decode ou simplexml_load_string .

A classe é acessada em um módulo por meio de uma função getter que usa drupal_static , ou o $staticpadrão do Drupal 6.

Eu então uso isso dentro de meus blocos personalizados, retornos de chamada de menu etc., conforme necessário.

EDITAR

A resposta de @ kiamlaluno está correta e demonstra uma maneira de fazer isso por meio da API Drupal. A principal razão pela qual não faço isso é porque prefiro abstrair a classe de serviço da web de uma maneira que me permita usá-la em outros aplicativos. Existem vantagens e desvantagens nisso, portanto pesa suas opções.

mpdonadio
fonte
Isso significa que eu planejo consumir dados do serviço da web? Existe uma solução como construtor de sites com módulos?
Dvex
Sinto muito, mas não entendo direito o que você está tentando fazer.
mpdonadio
Em outras palavras, procuro uma solução que não envolva uma programação. Uma solução como um construtor de sites com módulos. Mas, se no meu caso envolver programação, preciso das etapas para fazê-lo.
Dvex
Você poderia fornecer um exemplo de classe abstrata de serviço da web?
milkovsky