Drupal

Ús del mòdul restws a Drupal 7: Part 2

Seguim amb el mòdul RESTful Web Services per explicar-vos com configurar el Drupal perquè un script PHP pugui obtenir les dades remotament i com programar un script que obtingui aquestes dades.

Drauta agencia digitalDrauta

Ús del mòdul restws a Drupal 7: Part 2

Cómo configurar Drupal para el módulo restws

1) Al Drupal haurem de crear un rol específic (p.e. "restws") i assignar-li els següents permisos en funció de les nostres necessitats:

  • Filter: Utilització dels formats "Full HTML", "Filtered HTML" que ens interessi compartir.
  • Node: Donar el permís "Evita el control d'accés al contingut".
  • RESTful web services: Marcar tots els recursos que ens interessi compartir.
  • Taxonomy: "Administra els vocabularis i els termes" o bé (recomenat) instal·lar el mòdul Vocabulary Permissions Per Role i assignar només permisos sobre les taxonomies que ens interessi compartir.
  • Taxonomy Acces Control Lite: Si fem servir aquest mòdul i ens interessa poder consultar detalls de les taxonomies que es fan servir per controlar l'accés al contingut, haurem de donar el permís "administer tac_lite".

2) Aleshores crearem un usuari normal de Drupal que tingui aquest rol. Perquè funcioni, el "username" d'aquest usuari ha de començar per "restws". Un cop fet, ens hem d'assegurar de tenir activat el submòdul "Basic authentication login".

3) Ara ja només ens queda veure com conectar-nos al servei Drupal des d'un script PHP.

<?php

// <URL_DRUPAL>/node.json?type=news&field_tag=2

$params = array();
$params['type'] = 'news';
$params['field_tag'] = '2';
$result = remote_query($params);

if ($result !== FALSE) {
  print_r($result);
}

/**

 * Do a remote query (the client is a Drupal with restws module).
 *
 * @param array $params
 *
 * @return array with results or FALSE if problem detected.

 */

function remote_query($params) {

  $username = 'restws_user';
  $password = 'ur_password';
  $domain = 'URL_DRUPAL';

  $get_url = 'node.json';

  $url = $domain . $get_url . '?' . http_build_query($params);

  // Do query.

  try {
    $headers = array();
    $headers[] = 'Cache-Control: no-cache';

    $process = curl_init($url);

    curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($process, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($process, CURLOPT_TIMEOUT, 15); // time in seconds.
    curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);

    $response = curl_exec($process);

    curl_close($process);

    if (is_json($response)) {
      return json_decode($response);
    }
    else {
      return FALSE;
    }
  }

  catch (Exception $e) {
    return FALSE;
  }
}

/**
 * Check json integrity.
 */

function is_json($string) {

  json_decode($string);
  return (json_last_error() == JSON_ERROR_NONE);

}

Després d'haver fet servir aquest mòdul en un projecte real hem vist que el potencial d'aquest mòdul és molt gran de cara a fer aplicacions mòbils a partir d'una web ja existent. No osbtant veiem que hi ha dos punts clau que haurien de millorar per tal de ser perfecte:

  • Implementar el deep load: per exemple, quan carregues un article veuràs que té associada la taxonomia 11, però si vols més informació com, per exemple, el títol d'aquesta taxonomia, hauràs de fer una crida remota addicional. A drupal.org hi ha diverses incidències que parlen del tema, però a cap lloc hi ha instruccions clares de com aconseguir-ho. Creiem que hauria de venir de sèrie perquè de cara al rendiment és clau (veure captura de pantalla).
  • Permetre fer filtratges múltiples sobre un mateix camp: per exemple, per poder llistar events que es troben entre dues dates.

Módulo restWS Drupal

Vols començar un nou projecte amb nosaltres?

Necessites un servei per a la teva web? Descobreix com et podem ajudar i no dubtis en contactar amb nosaltres.