24. Comunicazione tra server: il mondo delle API

Andrea Pastore 27/09/2020 0

Nel mondo informatico è frequente la necessità di parlarsi tra sistemi diversi. Supponiamo ad esempio che due server della stessa azienda devono scambiarsi informazioni sugli utenti: per fare questa cosa bisognerà prevedere lo sviluppo di file appositi che si connetteranno all’altro server e comunicheranno queste informazioni. Ogni server deve avere anche dei file predisposti per ricevere queste informazioni. Questi file prendono il nome di API. Mentre altri file sul server si occuperanno ad esempio di mostrare i siti o fare altri processi, le API saranno sempre in ascolto ricevere informazioni da uno o più server esterni.

Comunicazione tra server: l’esigenza di una lingua comune

I server possono avere diverse tecnologie, ma questo non deve essere un ostacolo alla comunicazione. Sono state inventate diversi sistemi di interscambio di dati, i più comuni sono il JSON e l’XML.

JSON

JSON sta per JavaScript Object Notation ed è il formato di scambio dei dati più diffuso oggi. Un oggetto JSON inizia e termina con una parentesi graffa, gli elementi al suo interno vengono rappresentati mettendo il nome dell’elemento seguito dai due punti e poi dal valore. Il nome dell’elemento sarà messo tra virgolette, il valore sarà messo tra virgolette solo se è una stringa. Ad esempio:

“nome”:”Mario”

oppure nel caso di un valore numerico:

“età”:5

Nota: dopo ogni elemento (tranne l’ultimo) è necessario mettere una virgola.

Vediamo un esempio di oggetto JSON che contengono le informazioni di una persona:

{
“nome”:”Mario”,
“cognome”:”Rossi”,
“età”:5,
“email”:”mariorossi@virgilio.it”
}

Array in JSON

Il JSON ha la possibilità di raccogliere elementi dello stesso tipo in un array, proprio come la maggior parte dei linguaggi di programmazione. Proprio come nei principali linguaggi di programmazione l’array si crea con le parentesi quadre e al suo interno vanno inseriti gli elementi separati da una virgola. Supponiamo ad esempio di dover rappresentare in JSON un oggetto regione, contenente nome, popolazione, pil e una lista delle principali città. Il campo principali città può essere un array con vari elementi all’interno:

	“principaliCitta”:[“Città 1”,“città 2”];

Un array può contenere anche oggetti. Pensando all’esempio di prima, supponiamo di voler rappresentare le città in maniera più accurata, indicando per ognuna nome, numero di abitanti e la provincia. L’esempio diventerebbe cosi:

	“principaliCitta”:[

{

“nome”:”Firenze”,

“abitanti”:300000,

“provincia”:”FI”

},{

“nome”:”Prato”,

“abitanti”:15000,

“provincia”:”FI”

}],

Esistono dei siti che consentono di validare il JSON scritto, ad esempio:

https://jsonformatter.curiousconcept.com/

Manipolare oggetti JSON con PHP

PHP mette a disposizione delle funzioni che consentono creare e decodificare oggetti in formato JSON: si tratta delle funzioni json_encode e json_decode.

json_encode

Per creare oggetti JSON usiamo la funzione json_encode() che prende in input un array e restituisce un oggetto JSON. Tipicamente useremo questa funzione abbinata alla funzione echo, perché dopo aver creato l’oggetto JSON vorremmo stamparlo. Vediamo un esempio:

           $utente = [

                "nome"       => "Mario",

                "cognome" => "Rossi",

                "email"       => "mariorossi@gmail.com"

           ];

          echo json_encode($utente);

i moderni browser possono formattare i dati JSON, basta indicare nell'header di pagina che si tratta di dati di questo tipo. Questo si fa con il seguente comando:

          header('Content-Type: application/json');

json_decode

La funzione json_decode() serve per decodificare i dati JSON: prende in input una stringa e restituisce l'oggetto a cui possiamo accedere  allo stesso modo in cui accediamo alle proprietà di una classe con variabili pubbliche. Vediamo un esempio:

          $jsonTxt = '{

                                "nome" : "Mario",

                                "cognome" : "Rossi",

                                "email" : "mariorossi@gmail.com"

                            }';

        $jsonObj  = json_decode($jsonTxt);

        // recupero le informazioni

        $nome       = $jsonObj->nome;

        $cognome = $jsonObj->cognome;

        echo "$nome $cognome";

SOAP

Il protocollo SOAP consente di scambiare informazioni tra componenti software utilizzando come fonte di scambio documenti scritti in XML (un metalinguaggio per la definizione di linguaggi di markup, come ad esempio HTML, ideato per consentire agli utenti di creare documenti con markup personalizzati). Era il protocollo di scambio standard prima dell’avvento del JSON, ma conserva una fetta non trascurabile di utilizzo. 

Il file WSDL

Ogni web server ha un file WSDL che contiene la descrizione della sua interfaccia: i parametri necessari ad eseguire le varie operazioni, i messaggi di risposta e cosi via.

La classe SoapClient

PHP mette a disposizione la classe SoapClient per comunicare con i web server SOAP.

Il costruttore di questo dato prende in input un indirizzo web dove è specificato il file WSDL con le opzioni del web server.

         $wsdl  = “linkwsdldelserver.wsdl";

         $soap = new SoapClient($wsdl);

Il metodo doRequest è quello che si occupa di eseguire la richiesta. Restituisce il responso del server, che dobbiamo mettere in una variabile:

         $responso = $soap->__doRequest($wsdl, $location, $action, $version);

Nota: la risposta viene fornita nel formato stdObject, quindi per accedere ai dati dovremmo comportarci come quando recuperiamo i dati di un oggetto, ad esempio:

	echo	$responso->elemento
Potrebbero interessarti anche...

Andrea Pastore 27/09/2020

25. Composer

Composer è un gestore di pacchetti per PHP. È nato nel 2015 e da allora si è imposto come lo standard per la gestione delle dipendenze.

Scaricare Composer

Per scaricare Composer visitare il sito https://getcomposer.org/ e a seconda del sistema operativo che avete avrete una diversa procedura di installazione.

Il file composer.json

Il file composer.json contiene tutte le dipendenze per gestire il nostro progetto. Quando dobbiamo utilizzare una libreria esterna ci basterà inserirla in questo file e automaticamente Composer la scaricherà per noi.

Esempio di composer.json :

{

    "require": {

        "monolog/monolog": "dev- master#2eb0c0978d290a1c45346a1955188929cb4e5db7",

        "acme/foo": "1.0.x-dev#abc123"

    },

    "autoload": {

        "psr-4": {

            "Monolog\\": "src/",

            "Vendor\\Namespace\\": ""

        }

    }
Leggi tutto

Andrea Pastore 27/09/2020

14. PHP e MySQL

PHP mette a disposizione una serie di strumenti per collegarsi ai più noti database. Essendo utilizzato soprattutto in ambito web PHP è sempre associato al database MySQL, per il quale mette a disposizione la classe mysqli. Vediamo come funziona

Creazione dell’oggetto database

	  $db = new mysqli($host, $utenteDb, $passwordDb, $nomeDb);

            if (mysqli_connect_errno()) {

                echo "Errore durante la connessione al Database: ".mysqli_connect_error();

                exit();

            }

Specificare una porta diversa dalla porta di default

Potrebbe capitarci di lavorare in aziende con requisiti stringenti di sicurezza, che ad esempio hanno cambiato la porta di default a cui il server MySQL è in ascolto. È possibile specificarla, scrivendo:

	$db = new mysqli($host, $utenteDb, $passwordDb, $nomeDb,$portaMysql);

Esecuzione di una query

	if(!$risQuery = $db->query($query)) {
                    echo "Errore durante l'esecuzione della query: ".$db->error;
                    echo "<br>$query";
                exit();
          }

Recuperare i dati della query

Per recuperare i dati della query usiamo la funzione fetch_assoc invocata sull’oggetto $risQuery. Questa funzione restituirà un array associativo che potremmo poi utilizzare per stampare i dati che ci interessano, usando come indici i nomi dei campi del database.

	$oggetto = $risQuery→fetch_assoc();

supponendo che la tabella su cui abbiamo eseguito la query abbia i campi id e nome, dopo aver eseguito il codice qui sopra potremmo scrivere:

	echo $oggetto[“id”].” ”.$oggetto[“nome”];

Se la query ha restituito più di un risultato dobbiamo creare un ciclo per recuperarla:

	while($oggetto=$result->fetch_assoc()) {

// elaboro le singole righe

echo $oggetto[“id”].” ”.$oggetto[“nome”].”
”;  

}

Nota: nel ciclo while abbiamo aggiunto un tag
dopo la stampa, in modo che ad ogni riga del database corrisponda una riga diversa a video.

Conoscere il numero di elementi restituiti dalla query

Può capitare di dover conoscere il numero di elementi restituiti da una query. Questa operazione si può fare controllando la proprietà num_rows dell’oggetto restituito:

	$numeroRighe =  $result->num_rows;
Leggi tutto

Andrea Pastore 27/09/2020

21. PHP e i file

PHP, come tutti i linguaggi di programmazione, dispone di una serie di funzioni per gestire i file.

Controllare l’esistenza di un file

Ci sono casi in cui dobbiamo verificare l'esistenza di un file, prima di compiere

determinate operazioni. In tal caso possiamo usare file exists, che restituisce ture

se il file esiste e false altrimenti

     if(file_exists("text.txt")) {

         echo "Il file esiste";

     }

     else {

         echo "Il file non esiste";

     }

La funzione fopen

La funzione fopen è una delle unzioni più popolari per quanto riguarda i file: crea un oggetto che consente la lettura di un file in diverse modalità:

  • lettura
  • scrittura
  • append
  • lettura e scrittura

il secondo parametro ci consente di specificare la modalità del file

  • r sta per lettura
  • w sta per scrittura
  • w+ lettura e scrittura, elimina il contenuto precedente del file
  • a sta per append
  • a+ lettura e scrittura, non elimina il contenuto precedente
     $file = fopen("prova.txt", "r");

     // per leggere un file possiamo usare questo ciclo
     while(! feof($file)) {
        $line = fgets($file); // fgets lette il file una riga alla volta
        echo $line. "<br>";
     }

     /*
      * per scrivere un file oltre ad aprire un file in modalità scrittura
      * con fopen dobbiamo utilizzare la funzione fwrite
      */
     $file2 = fopen("file.txt","w");
     fwrite($file2,$line);

Leggere il contenuto di un file

PHP mette a disposizione altre funzioni per leggere l’intero contenuto del file:

readfile()

     $contenutoFile = readfile("prova.txt");

     echo $contenutoFile; // nota che questa funzione stamperà il contenuto del file e la lunghezza

file_get_contents()

La funzione più utilizzata per leggere sui file, consente anche di specificare se è abilitata la modalità strict path (che non vedremo in questa guida), un eventuale context e  il punto di partenza della lettura e quanti caratteri dobbiamo leggere.

     // in questo esempio leggiamo tutto il contenuto

     $contenutoFile = file_get_contents(“prova.txt”);

     // in questo esempio leggiamo i primi 20 caratteri a partire dall’undicesimo carattere

     $contenutoFile = file_get_contents(“prova.txt”, FALSE, NULL, 20, 14);

Copiare un file

PHP mette a disposizione la funzione copy per copiare un file. Vediamo un esempio:    

     copy("file.txt","nuovoFile.txt");

Con copy è possibile copiare anche file localizzati su server diversi. Per fare questo basta specificare un'url nel primo parametro, ad esempio:

     copy("https:miosito.it/logo.png","nuovoFile.png");
Leggi tutto

Cerca...