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

10. Include, Require

A volte può essere necessario richiamare pezzi di codice scritti altrove. Per fare questo PHP ci mette a disposizione due comandi:

  • include
  • require

Ad esempio, supponiamo di aver creato un file funzioni.php dove che contiene tutte le nostre funzioni. Per includerlo dobbiamo creare questo codice:

	include “funzioni.php”;

oppure:

	require “funzioni.php”;

queste due funzioni assolvono allo stesso compito, ma hanno un comportamento diverso nel caso il file non venga trovato: include genera un errore di tipo warning, che non blocca l’esecuzione dello script PHP, require invece genera un errore di tipo fatal error, bloccando l’esecuzione dello script.

Percorso parziale o un percorso assoluto

Sia include che require permettono di specificare percorsi parziali e percorsi assoluti.

Nell’esempio precedente abbiamo usato un percorso parziale, include e require avrebbero cercato il file funzioni.php nella cartella in cui si trova il file dove viene richiesta l’inclusione. Un altro esempio di percorso parziale può essere:

	include “../funzioni.php”;

che cercherà il file da recuperare nella cartella che contiene la cartella dove si trova il file. Ancora un altro esempio è:

	include “cartella/funzioni.php”;

che cercherà il file da recuperare nella cartella che “cartella”, che deve trovarsi nella stessa cartella dove si trova il file.

Se ad esempio scriviamo:

	include “/var/www/html/funzioni.php”;

oppure

	require “/var/www/htm/funzioni.php”;

stiamo indicando al PHP il percorso esatto, partendo dalla root del sistema operativo, dove recuperare il file.

Leggi tutto

Andrea Pastore 26/09/2020

7. Buone abitudini: indentare il codice

L’indentazione del codice consiste nell’inserire alcuni spazi all’inizio di una riga, ed è usata per aiutare a capire la struttura del codice scritto. Se ad esempio dobbiamo scrivere un if, per indicare il codice da eseguire se la condizione è verificata è buona norma indentare questo codice. Facciamo un esempio, prendiamo questo codice non indentato:

Tutti i caratteri sono scritti uno sotto l’altro e il codice risulta più difficile da leggere. Questo è un codice di poche righe, ma cosa succederebbe se fosse più corposo? Ci costringerebbe a perdere più tempo a capire cosa fa. Vediamo ora un codice ordinato:

Basta una rapida occhiata per capire il codice dove si trova e cosa fa.

Le regole dell’indentazione

Dobbiamo indentare il codice delle strutture di controllo (if, switch, for e altri), dei metodi e infine delle classi.

Leggi tutto

Andrea Pastore 26/09/2020

9. Le funzioni in PHP

Spesso capita che dobbiamo usare un determinato pezzo di codice in più parti della nostra web application. Potremmo certamente ricopiare il codice ovunque ci serva, ma non è una buona idea: se dobbiamo cambiare quel codice dovremmo andarlo a modificare in tutti i punti in cui lo abbiamo scritto. Esiste un modo migliore per ottimizzare questo aspetto della programmazione: la creazione di funzioni.

Una funzione è un codice che può essere richiamato in altre parti del programma. In questo modo quando dovrà essere modificata dovremmo modficiare solo il codice contenuto nella funzione e non in tutti i punti in cui è stata chiamata. Per definire una funzione si deve usare la parola chiave function, ad esempio:

	function saluta() {

    echo "Ciao mondo!";

}

la funzione che abbiamo appena scritto stampa la scritta “Ciao mondo!”. Ovviamente il codice qui sopra definisce la fuzione, ma non la manda in esecuzione. Per eseguirla bisognerà richiamarla nel nostro codice scrivento:

	saluta();

Parametri di una funzione

una funzione può avere dei parametri passati in input, che vanno specificati nelle parentesi tonde. Vediamo un esempio:

	function saluta2($nome) {

    echo "Ciao $nome!";

}

Il parametro $nome può contenere qualsiasi valore, ad esempio posso chiamare la funzione in questo modo:

	saluta2("Mario");   

saluta2("Antonio");

Ho chiamato la funzione due volte, usando due nomi diversi, quindi PHP stamperà di volta in volta il nome che gli viene passato.

Nota: se la funzione non riceverà i parametri attesi (nel caso di saluta2 il parametro $nome) darà un errore.

Parametri preimpostati

È possibile assegnare un valore predefinito ai parametri. Vediamo ad esempio questa funzione:

	function saluta3($nome = “Mario”) {

    echo "Ciao $nome!";

}

Questa funzione può essere utilizzata come la funzione saluta2 vista sopra, ovvero:

	saluta3(“Antonio”);

ma può anche essere utilizzata senza parametri:

	saluta3();

In questo caso la funzione assegna alla variabile $nome il valore di default stabilito al momento della sua creazione.

È possibile anche avere un misto di parametri preimpostati e non. Ad esempio la funzione definita qui di seguito:

	function nuovaFunzione($parametro1, $parametro2 = “test”) {

echo “$parametro1 $parametro2”;

}

prende in input due parametri, di cui uno è preimpostato. Significa che questa funzione può essere chiamata in questo modo:

	nuovaFunzione(“valore1”, “valore2”);

oppure

	nuovaFunzione(“valore1”);

In questo esempio la funzione ha un solo parametro preimpostato, quindi se provassimo a richiamarla in questo modo:

	nuovaFunzione();

otterremmo un errore.

Inserire i tipi di dato

nei parametri in input possiamo specificare il tipo di dato, per rendere più sicuro il codice. Consideriamo la funzione:

	function cubo($numero) {

return $numero * $numero * numero;

}

se passiamo per errore un dato errato, ad esempio scriviamo:

	cubo(“cento”);

la funzione restituirà dei warning, ma lo script continuerà la sua esecuzione creando errori a cascata. Se invece modifichiamo la firma della funzione scrivendo:

	function cubo(int $numero) {

return $numero * $numero * numero;

}

in questo caso al momento di eseguire la funzione verrà generato un fatal error, che bloccherà l’esecuzione dello script.

Funzioni predefinite

PHP dispone di un gran numero di funzioni predefinite, che consentono di eseguire operazioni comuni. Sono tantissime, in questa tabella vediamo le principali.

Nome funzione  Utilità 
 strlen restituisce la lunghezza di una stringa

Esempio:
strlen($stringa)
 str_replace Sostituisce una sottostringa con un altro valore all’interno di una stringa

Esempio:
str_replace($trova,$sostituisciCon,$stringa)
 substr Restituisce una porzione della stringa passata in input. Prende in input, oltre alla stringa, la posizione di partenza e il numero di elementi da inserire nella sottostringa.

Esempio:
substr($stringa,0,20);
// restituisce i primi venti caratteri della variabile $stringa
 strtolower Restituisce la stringa con tutte le lettere in minuscolo

Esempio:
strtolower($stringa);
 strtoupper Restituisce la stringa con tutte le lettere in maiuscolo

Esempio:
strtoupper($stringa);
 htmlspecialchars Funzione che restituisce una stringa in cui i caratteri speciali della stringa passata in input sono convertiti in entità HTML.

Esempio:
htmlspecialchars(“”);

L’output di questo comando sarà:



I simboli “<” e “>” sono stati trasformati in entià HTML, rispettivamente in < e >

Questo fa si che il risultato visivo per l’utente sia lo stesso, ma l’interprete JavaScript non eseguirà questo codice in quanto non è racchiuso dal tag

Viene utilizzata quando dobbiamo stampare del codice in una pagina web (ad esempio a scopo didattico) oppure per rendere sicure delle stringhe passate in input (sebbene la soluzione ideale sia la funzione filter_input).
 exit Termina l’esecuzione del programma, tutto il codice che si trova dopo la chiamata di questa funzione non verrà eseguito.

Esempio:
exit();
 isset Consente di verificare se una variabile è stata creata o meno. Restituisce true se la variabile esiste, false altrimenti. Viene usata tipicamente negli if, in modo da fare delle azioni quando

Esempio:
if(isset($variabile)) {
      // se la variabile esiste esegue un certo codice
}
else {
      // se la variabile non esiste esegue altre azioni
}
 is_numeric Restituisce true se il valore passato in input è un numero, viene usata tipicamente all’interno di un if.

Esempio:
if(is_numeric($var)) {
      // eseguo il codice dell’if
}
 is_string Restituisce true se il valore passato in input è un numero, viene usata tipicamente all’interno di un if.

Esempio:
if(is_string($var)) {
      // eseguo il codice
}
 header Funzione per gestire gli header, viene usata tipicamente per reindirizzare l’utente in qualche altra pagina del nostro sito.

Esempio:
header(“Location: index.php”);
Leggi tutto

Cerca...