Ho pensato di dare un’occhiata a come HTTP funziona in generale e a come utilizzare le funzioni native di WordPress per lavorarci, aprendo i vostri prodotti all’integrazione con Twitter, Facebook, Mailchimp e altri strumenti.

In questo articolo – parte 1 di 2 – scopriremo le basi delle richieste HTTP, come sono strutturate, le informazioni che contengono e come interpretarle. Nella parte 2 metteremo in pratica le nostre conoscenze – attraverso WordPress.

Cos’è HTTP

HTTP è il principale protocollo utilizzato oggi sul web. L’acronimo sta per Hypertext Transfer Protocol ed ha il compito di mostrare HTML, immagini e altro. I client HTTP – come il vostro browser – inviano richieste ai server HTTP che rimandano indietro una risposta.

Ad esempio, se puntate il vostro browser su Kinsta.com, state inviando una richiesta ai server di Kinsta. Il server legge la vostra richiesta, capisce di cosa avete bisogno (parleremo a breve di come questo accade) e manda indietro una risposta che contiene il codice HTML della pagina. Il vostro browser legge la risposta e rende il codice HTML sullo schermo.

Nozioni di Base sulle Richieste HTTP

Qualsiasi transazione tra un client e un server inizia con una richiesta HTTP. Le due parti più importanti di una richiesta sono il nome del metodo e l’URL della risorsa richiesta. Cominciamo con quest’ultimo.

Risorse

Una risorsa è un dato che può essere identificato con un URL. Per esempio: http://myblog.com/my-awesome-article restituirà probabilmente un file HTML – il codice necessario per rendere il vostro fantastico articolo.

Nomi dei Metodi

I nomi dei metodi identificano il tipo di azione che volete eseguire sulla risorsa. I browser utilizzano quasi sempre il metodo GET, che indica che si vuole recuperare la risorsa.

Altri metodi sono POST, per creare nuovi elementi, PUT, per aggiornare gli elementi, DELETE, per eliminare gli elementi e HEAD, per prendere le informazioni dell’intestazione.

Questi nomi di metodi, insieme agli URL, forniscono la base delle API REST. Si potrebbe inviare una richiesta get a /article/4 per recuperare l’articolo 4. Si potrebbe anche inviare una richiesta PUT con alcuni dati per modificarlo, o una richiesta DELETE per rimuoverlo.

La Struttura di HTTP

Le richieste e le risposte HTTP sono molto simili da un punto di vista strutturale. Ognuna ha quattro parti distinte:

  • Una riga iniziale che è diversa per la richiesta e la risposta
  • Intestazioni opzionali che contengono informazioni sulla richiesta o sulla risposta
  • Una riga vuota
  • Contenuto del corpo opzionale

1. La Riga Iniziale

Per le richieste, la riga iniziale contiene tre informazioni: il nome del metodo, il percorso della risorsa e la versione HTTP utilizzata. Ecco come potrebbe apparire:

GET /users/4 HTTP/1.1

Si noti che questa linea contiene il percorso relativo locale e non l’URL completo. L’URL di base è inviato in un’intestazione (l’intestazione Host). Daremo a breve un’occhiata alle intestazioni.

Le risposte contengono anche tre informazioni: la versione HTTP, il codice di stato e un motivo che descrive il codice di stato.

HTTP/1.1 302 Moved Temporarily

Per un elenco di tutti i codici di stato e una descrizione di ciascuno, date un’occhiata alla Specifica dei codici di stato HTTP, lì è tutto abbastanza chiaro.

2. Headers

Le intestazioni sono essenzialmente coppie nome-valore di informazioni. La già citata intestazione Host è un buon esempio, infatti è l’unica intestazione richiesta in HTTP 1.1. Le intestazioni vi offrono maggiore controllo e più informazioni.

L’intestazione Accept vi permette di specificare il tipo di contenuto che permetterete in una richiesta. L’intestazione Accept-Language vi permette di controllare la lingua del contenuto che siete disposti ad accettare. Entrambe sono forme di negoziazione del contenuto.

L’intestazione Authorization è una di quelle che utilizzerete pesantemente quando lavorate con le API per accedere ad azioni di sola autorizzazione, come la cancellazione di un Tweet o l’accesso al vostro account utente.

3. Body

Il corpo è la parte dove viene restituita la risorsa, o dove possono essere fornite ulteriori spiegazioni se si è verificato un errore. Potete utilizzare il vostro linguaggio preferito per leggere i dati dal corpo e visualizzarli, o utilizzarlo internamente per gestire gli errori.

Utilizzare HTTP

Ho scoperto che capire HTTP è enormemente utile quando si negozia la documentazione delle API di terze parti. Ciò che complica l’utilizzo di HTTP è che di solito lo si usa all’interno di un linguaggio di programmazione, il che significa che è necessario avere familiarità con il modo in cui quel linguaggio implementa HTTP, oltre che con lo stesso HTTP.

Una volta che avete fatto la richiesta, avrete bisogno di leggere la risposta, sapere quali informazioni prendere da questa risposta, forse anche eseguire la risposta attraverso alcune funzioni per convertirla nel formato che vi serve. Una volta che avete queste informazioni, potrete visualizzarle, salvarle in un database o manipolarle in altro modo.

L’HTTP in sé non è difficile, ma i task che dovete eseguire, oltre a fare/ricevere una richiesta, possono aumentare abbastanza rapidamente, mascherando la semplicità dell’HTTP con un velo di complessità. Inoltre, molte API richiedono l’autenticazione, il che aggiunge un altro livello al tutto.

cURL

cURL offre un modo di interagire con HTTP, ma è piuttosto complesso. Può essere utilizzato dal terminale, ma anche PHP supporta cURL. Per prendere il contenuto di un URL si potrebbe utilizzare il seguente comando nel terminale.

curl http://kinsta.com

Il problema è che utilizzare cURL nel terminale può diventare un po’ complesso. Per visualizzare solo le informazioni dell’intestazione dovreste utilizzare il seguente modulo:

curl -s -D - http://danielpataki.com -o /dev/null

Potete visualizzare una lista di tutti i parametri, ma è probabile che userete cURL nella vostra applicazione web, quindi vediamo come utilizzare cURL in PHP. Ecco come ottenere il contenuto della stessa pagina:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data = curl_exec($ch);
curl_close($ch);
echo $data;

Questo è ancora un po’ complicato, ma seguendo la Guida PHP potrete capire cosa è cosa.

Utilizzare WordPress

CURL è ottimo, ma aggiungere intestazioni e gestire le informazioni restituite non è così facile come si potrebbe credere se si è lavorato con classi e funzioni PHP ben codificate. Fortunatamente WordPress ci offre la sua API HTTP. La vedremo in dettaglio nel prossimo articolo, per ora, ecco un esempio della funzione nativa di WordPress, con l’aggiunta di intestazioni:

$request = wp_remote_get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kinsta, array(
    'headers' => array(
        'Authorization' => 'Bearer ' . $token,
    ),
));

Riepilogo

HTTP è la base di tutto ciò che facciamo sul web e sapere cosa succede in una richiesta e in una risposta ci dà grandi capacità di risoluzione dei problemi e ci permette di controllare meglio le nostre applicazioni.

Acquisendo le basi di HTTP sarete in grado di utilizzare le API esterne meglio e più velocemente, sapendo esattamente cosa fare con le informazioni fornite nelle guide alle API.

Nel prossimo articolo della serie vedremo come gestire i dati HTTP con WordPress e come collegare facilmente WordPress con un servizio di terze parti.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.