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
16. Le sessioni
Le sessioni sono un modo che ha il PHP per ricordare dei valori da una pagina ad un’altra. Vediamo un esempio:
session_start();
$_SESSION[“nome”] = “Mario”;
Con questo codice ho creato una variabile di sessione dove memorizzo che nome = Mario. Quindi, quando nelle altre pagine PHP faremo riferimento a quella variabile, riceveremo il valore Mario. Ad esempio supponiamo di voler stampare la variabile di sessione nome creata sopra. Scriveremo:
session_start();
echo $_SESSION[“nome”];
session_start() e session_destroy()
Quando vogliamo usare le sessioni in una pagina PHP dobbiamo utilizzare la funzione session_start(). Se nei due esempi precedenti togliessimo la session_start il codice genererà un errore, perché la variabile globale $_SESSION non è visibile.
Un esempio molto comune: lo script per il login
Supponiamo che l’utente abbia effettuato il login ad un portale web: ha inserito le credenziali, il nostro codice PHP ha fatto una query e ha appurato che l’utente esiste. Per fare in modo che PHP si ricordi che l’utente ha già effettuato il login bisogna usare questo codice:
session_start();
$_SESSION[“nomeSessione”] = “valore a piacere”;
nelle pagine in cui vogliamo controllare che una determinata sessione sia presente, scriveremo un codice che, se la sessione non esiste l’utente viene rediretto in un’altra pagina:
session_start();
if(!isset($_SESSION["idUtente"])) {
header("Location: accessonegato.php");
}
Eliminare una sessione
Quando una sessione non è più necessaria può essere eliminata con la funzione unset() vista anche per gli array.
unset($_SESSION[“nomeSessione”]);
Se dobbiamo eliminare tutte le sessioni, ad esempio quando un utente ha effettuato il logout, possiamo usare session_destroy(). Prima di invocare session_destroy() bisogna invocare session_start(), vediamo un esempio qui sotto:
session_start();
session_destroy();
header("Location: index.php");
l’ultima riga di codice serve per effettuare un redirect ad un’altra pagina, cosa da fare nella stragrande maggioranza dei casi dopo che un utente ha effettuato un logout.
Andrea Pastore 26/09/2020
6. Prendere decisioni: il costrutto if
PHP può prendere decisioni tramite il costrutto if, la cui sintassi è:
if($i>10) {
echo "i è maggiore di 10";
}
la parola chiave if è seguita dalle parentesi tonde che indicano una condizione. Le parentesi graffe successive indicano invece il codice che viene eseguito se la condizione è verificata
else ed else if
I costrutti else ed else if servono per aggiungere delle possibilità all’if. Entrambi hanno bisogno di un if prima, e servono per poter prendere diverse decisioni. Nel codice sottostante usiamo un else per eseguire del codice quando a condizione non è verificata:
if($i>10) { // il codice sottostante verrà eseguito solo se la condizione è verificata
echo "i è maggiore di 10";
}
else { // questo codice viene eseguito se la condizione a riga 13 non è verificata
echo "non è maggiore di 10";
}
Quando dobbiamo verificare più condizioni ci viene in aiuto l’else if. nell’esempio sottostante il nostro if verificherà prima se la variabile $i è maggiore di 10, poi se è maggiore di 5 e infine se nessuan di queste due condizioni è verificata eseguirà il codice contenuto nell’else.
if($i>10) { // il codice sottostante verrà eseguito solo se la condizione è verificata
echo "i è maggiore di 10";
}
else if($i>5){ // se la prima condizione non è verificata prova questa
echo "i è maggiore di 5";
}
else { // questo codice viene eseguito se nessuna condizione è verificata
echo "non è maggiore di 10";
}
Nota che quando il costrutto verifica una condizione, ad esempio la prima, verrà eseguito solo il codice conenuto in quella sottosezione. Spesso queste sottosezioni sono chiamate rami.
Possibili condizioni dell’if
Oltre ai simboli > e < che servono per controllare se un numero è maggiore o minore di un altro, abbiamo altre condizioni che possiamo usare, ad esempio possiamo usare l’operatore == per verificare l’uguaglianza di due numeri oppure due stringhe.
if($i==10) { // il codice di questo if verrà eseguito solo se la variabile $i = a 10
echo “i due numeri sono uguali”;
}
vediamo un esempio con le stringhe:
// il codice di questo if verrà eseguito solo se la variabile $str è uguale a “stringa”
if($str == “stringa”) {
echo “La stringa ha il valore che abbiamo stabilito”;
}
un’altra possibile condizione che potremmo dover verificare è se due variabili sono diverse, per questo usiamo l’operatore !=
if($i != 10) { // il codice all’interno dell’if verrà eseguito solo se $i è diverso da 10
echo “$i è diverso da 10”;
}
Stesso discorso con la stringa:
// il codice di questo if verrà eseguito solo se la variabile $str è diversa da “stringa”
if($str != “stringa”) {
echo “La stringa non ha il valore stringa”;
}
Facciamo ora una tabella riassuntiva con gli operatori usabili all’interno di un if. Questi operatori sono detti operatori di uguaglianza.
Operatore | Nome | Esempio | Spiegazione |
---|---|---|---|
=== | Identical | $i === $k | Restituisce true se $i ha lo stesso valore di $k ed è dello stesso tipo di $k |
== | Equal | $i == $k | Restituisce true se $i ha lo stesso valore di $k |
!= | Not equal | $i != $k | Restituisce true se $i è diverso da $k |
< | Less then | $i < $k | Restituisce true se $i è minore di $k |
> | Greater then | $i > $k | Restituisce true se $i è maggiore di $k |
<= | Less then or equal to | $i <= $k | Restituisce true se $i è minore o uguale a $k |
>= | Greater then or equal to | $i >= $k | Restituisce true se $i è maggiore o uguale a $k |
Gli operatori AND e OR
Spesso quando prendiamo decisioni non basta prendere in esame un solo parametro
L’operatore OR
l’operatore OR si occupa di verificare che una delle condizioni specificate è vera. In PHP l’operatore OR è dato dal comando || . Si veda il seguente esempio:
if($var==0 || $var2 == 0) {
echo “una delle due variabili vale 0”;
}
La scritta “una delle due variabili vale 0” viene stampata solo se una delle due variabili rispetta la condizione. Notiamo che se entrambe rispettano la condizione la scritta viene stampata ugualmente, perché l’operatore OR controlla che almeno una condizione sia verificata.
L’operatore AND
L’operatore AND verifica che tutte le condizioni specificate siano vere. IN PHP si può usare questo operatore scrivendo &&. Modifichiamo l’esempio di prima usando l’operatore AND al posto dell’operatore OR. Il codice sarà quindi il seguente:
if($var==0 && $var2 == 0) {
echo “entrambe le due variabili valgono 0”;
}
in questo caso la scritta “entrambe le due variabili valgono 0” viene stampata solo se sia $var che $var1 valgono 0.
Il costrutto switch
Quando in un if dobbiamo verificare diverse condizioni possiamo utilizzare il costrutto switch, che ha la seguente sintassi:
switch($variabile) {
case 'crea':
$commento->crea();
break;
case 'modifica':
$commento->modifica();
break;
...
}
tramite la parola chiave case possiamo stabilire nuove operazioni da fare in base al valore della variabile passata in input allo switch. Al termine di ogni blocco dobbiamo usare la parola chiave break per terminare quel ciclo di istruzioni.
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\\": ""
}
}