Api Directus image

Api Directus, consumarle facilmente con PHP, utilizzare la cache e minificare la pagina.

Consumare le API Directus con PHP in modo facile e veloce

Directus, come accennato in alcuni miei post precedenti, è un CMS Headless che espone API di contenuto. Queste API Directus vengono generate in base alle tabelle definite sullo stesso Content management system .

Directus può essere utilizzato in cloud oppure installandolo direttamente su di un server ed utilizzare Ie sue API è molto semplice.

La struttura delle API Directus è ben definita nella guida presente su getdirectus.com ed è possibile consumarle con alcuni semplici comandi PHP:

$url = 'http://cms.manuelcesarini.it/api/1/tables/site/rows?access_token=TOKENDIACCESSO';

Salviamo l’url dell’API da utilizzare. ?access_token=TOKENDIACCESSO è uno dei metodi più semplice per effettuare il login con il CMS Directus.

$content = file_get_contents($url);
$json = json_decode($content, true);

Con questi due comandi invece andiamo ad “assimilare” i dati dell’API Directus e facciamo la decodifica in formato JSON.

foreach($json['rows'] as $item) {

    if ($item['active']=='1') {

        print $item['site_name'];
        print ' - ';
        print $item['Motto'];
        print ' - ';
        print $item['indirizzo_sito'];
        print '
';

    }
}

Infine con questo ciclo andiamo a stampare a video il contenuto del nostro array, solo per gli item attivi.

‘active’ infatti è un attributo che Directus associa ad ogni item per definirlo attivo ==1 o cancellato == 0

Ed il gioco è fatto! A questo punto potrai decidere di manipolare al meglio i tuoi dati provenienti dalle API Directus!

Una semplice cache per i tuoi dati

Il problema con le API è sempre lo stesso, cercare di evitare di dover effettuare centinaia di chiamate a ripetizione ( per evitare costi eccessivi o sovraccarico del server ).

La soluzione che ho sperimentato è molto semplice e rapida da implementare:

  1. scarichiamo da github “Simple-PHP-Cache
  2. includiamo la libreria e definiamo la nostra cache
        require_once './simple-cache/cache.class.php';
       // $c = new Cache();
        $c = new Cache(array(
      'name'      => 'directus',
      'path'      => 'cache/',
      'extension' => '.cache'
    ));
    
  3. salviamo i dati da mettere in cache, verifichiamo che non sia scaduto il suo tempo o se è attiva
    $c->eraseExpired();  //verifico se la cache è attiva o da cancellare
    if($c->isCached("saves") == false){ 
    
      foreach($json['rows'] as $item) {
    
        if ($item['active']=='1') {
    
            print $item['site_name'];
            print ' - ';
            print $item['Motto'];
            print ' - ';
            print $item['indirizzo_sito'];
            print '
    ';
    
        }
     }
    $c->store('saves', $json['rows'], 25 ); //salvo il mio array in cache
    
    
    } else {
          
        // prendo i dati in base alla key della cache
        $result = $c->retrieve('saves');
        // mostro i dati presenti in cache
        print_r($result);
    }
    

Minifichiamo! Ultimo esercizio!

Adesso abbiamo le nostre API, abbiamo la cache, non ci resta altro da fare che minificare il nostro output.

Una funziona molto semplice permette di “sanitarizzare” il nostro HTML in uscita, eccola qua:

 function sanitize_output($buffer)
{
    $search = array(
        '/\>[^\S ]+/s', //strip whitespaces after tags, except space
        '/[^\S ]+\',
        '<',
        '\\1'
        );

    $blocks = preg_split('/(<\/?pre[^>]*>)/', $buffer, null, PREG_SPLIT_DELIM_CAPTURE);
    $buffer = '';
    foreach($blocks as $i => $block)
    {
      if($i % 4 == 2)
        $buffer .= $block; //break out pre.../pre with \n's
      else 
        $buffer .= preg_replace($search, $replace, $block);
    }

    return $buffer;
}


ob_start("sanitize_output");

Buon divertimento!!!

0 comments on “Api Directus, consumarle facilmente con PHP, utilizzare la cache e minificare la pagina.Add yours →

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *