In questa serie, abbiamo dato un'occhiata al wp_remote_get
Funzione API HTTP di WordPress per capire come funziona, come possiamo usarla e gli argomenti opzionali che accetta.
Da qui, siamo in grado di scrivere richieste dettagliate; tuttavia, questa è solo la metà - c'è anche la risposta.
Nel secondo articolo abbiamo dato un'occhiata a come sarebbe stata una risposta di base, come valutarla e come visualizzarla sullo schermo, ma in realtà non abbiamo parlato della risposta in dettaglio.
Se stai cercando di scrivere richieste più avanzate e scrivere un codice più difensivo, è importante capire i dati inviati come risposta. In questo articolo finale, faremo esattamente questo.
Innanzitutto, è importante capire cosa intendo scrivendo un codice difensivo: quando scriviamo un software, spesso dobbiamo lavorare con i casi in cui un utente può fare qualcosa di sbagliato, l'input può essere impostato in modo errato o i dati possono essere recuperati o ricevuti - come nel caso di una risposta - in modo errato.
A tal fine, codifichiamo difensivamente contro quegli scenari in modo che il nostro software non si blocchi o bombardi completamente mentre l'utente lo sta usando. Invece, fallisce con grazia e continua a funzionare.
Sapendo cosa riceve esattamente la funzione in risposta alla sua richiesta, sappiamo quali dati cercare e come gestire con garbo il caso quando non ritorna come ci aspettiamo.
Per preparare il terreno su cosa aspettarsi, diamo un'occhiata a una risposta di esempio. Diciamo che devi fare un OTTENERE
richiedere un URL che restituirà un semplice bit di testo per te.
In generale, puoi aspettarti di fare richieste più complicate in cui la risposta potrebbe essere XML o JSON o qualcos'altro; tuttavia, tutte queste informazioni verranno impostate in corpo
indice dell'array di risposta. Quindi se capisci cosa aspettarti, allora capisci come gestirlo.
Detto questo, questa è la risposta che ci si potrebbe aspettare di ricevere da una semplice richiesta a un dominio che non restituisce altro che un semplice testo.
Array ([headers] => Array ([date] => Thu, 30 Sep 2010 15:16:36 GMT [server] => Apache [x-powered-by] => PHP / 5.3.3 [x-server] => 10.90.6.243 [expires] => Gio, 30 Sep 2010 03:16:36 GMT [cache-control] => Array ([0] => no-store, no-cache, must-revalidate [1] = > post-check = 0, pre-check = 0) [vary] => Accept-Encoding [content-length] => 1641 [connection] => close [content-type] => application / php) [body] = > 'Un semplice bit di testo.' [Risposta] => Matrice ([codice] => 200 [messaggio] => OK) [cookie] => Matrice ())
Nient'altro che una matrice (o, in realtà, una matrice di array). Niente pure male, giusto?
Esaminiamo ciascuno degli elementi di risposta in dettaglio.
Come puoi vedere dalla risposta sopra, le intestazioni sono in realtà composte da un'altra matrice che consiste in altre informazioni.
Prima di esaminare ciascuna parte delle informazioni di cui sopra, è importante capire cos'è esattamente un'intestazione. In breve, le intestazioni forniscono informazioni sulla comunicazione richiesta / risposta esistente tra il client e il server.
Vi è una vasta gamma di intestazioni che possono essere rimandate indietro (molte delle quali vanno oltre lo scopo di questo articolo), ma tutte ci aiutano a ottenere informazioni non solo sulla richiesta, ma sul server con cui siamo comunicare.
Detto questo, diamo un'occhiata a ciascun elemento di intestazione in dettaglio.
Chiaramente, questo è un elemento eccezionalmente facile da capire: in poche parole, questa è la data e l'ora in cui il messaggio è stato inviato. Ovviamente include il giorno, la data e l'ora tutti a Greenwich Mean Time, che è uno standard di tempo globale.
L'elemento server si riferisce al tipo di software su cui è in esecuzione il server. Più spesso, probabilmente vedrai Apache; tuttavia, ci sono altre applicazioni server disponibili oggi come IIS e il prossimo e successivo nginx.
X-Powered-By fa riferimento al software server che alimenta la transazione della comunicazione. Nel nostro caso, vediamo PHP che significa semplicemente che la nostra richiesta è stata inviata a un server che esegue Apache e PHP.
Questo potrebbe non essere sempre il caso, però.
Ad esempio, potresti finire a comunicare con un server che esegue nginx e Python, o un altro tipo di software server che esegue Ruby on Rails.
Questo particolare elemento di risposta fa riferimento all'indirizzo IP del server a cui viene inviata la richiesta. Raramente ho mai avuto bisogno di conoscere questa particolare informazione; tuttavia, se si ottiene una risposta inaspettata nonostante tutte le altre informazioni siano in ordine, può essere utile sapere se l'IP del server corrisponde a ciò che ci si aspetterebbe per il dominio a cui viene inviata la richiesta.
Ogni volta che viene fatta una richiesta e viene inviata una risposta, la risposta ha una durata, per così dire.
Più specificamente, la risposta sarà considerata "stantia" dopo un certo periodo di tempo. Ovviamente, il momento in cui la risposta è considerata obsoleta è quando la risposta è scaduta.
Per quanto tempo una risposta è considerata non aggiornata si basa sulla configurazione del server, ma il timestamp è dello stesso formato della data della richiesta.
Il controllo della cache fa riferimento al concetto che un browser Web (o qualche altro meccanismo di memorizzazione nella cache che si trova tra il client e il server) possa o meno essere in grado di utilizzare la prima risposta come risposta per le richieste future.
Ad esempio, se un server risponde con no-cache
, quindi significa che il browser, il server o altro software proxy o meccanismo di memorizzazione nella cache della macchina richiedente deve trattare ogni risposta come una nuova risposta. Se, d'altra parte, no-cache
è non specificato, quindi la prima risposta potrebbe essere l'unica risposta che si è in grado di ottenere (almeno fino a quando la cache non è impostata per scadere).
Questo ovviamente consiste di due indici:
no-cache
è stato impostatopost-verifica
e il pre controllo
intervallo come scaduto, verrà richiesta una versione più recente dei dati; in caso contrario, verrà recuperata una versione memorizzata nella cache.Questo particolare aspetto del caching è al di fuori dell'ambito di questa serie tanto più che potrebbe essere scritto e spiegato molto di più; tuttavia, la definizione sopra dovrebbe essere sufficiente per aiutare a spiegare le intestazioni che stai vedendo.
Questo valore di intestazione è simile all'intestazione Cache-Control in quanto indica ai server richiedenti come gestire richieste simili e successive.
In generale, questo istruirà il server indipendentemente dal fatto che sia possibile utilizzare una risposta cache o che debba essere recuperato un nuovo valore. Questo è un altro elemento che può diventare eccessivamente complicato, ma per cercare di distillare la spiegazione in qualcosa che è un po 'più in portata per ciò di cui stiamo discutendo, l'elemento header può anche indicare al server i vari tipi di contenuto che il cliente può elaborare.
Quindi nell'esempio sopra, stiamo istruendo il server che il nostro client è in grado di elaborare le informazioni codificate.
La lunghezza del contenuto è un concetto semplice con un singolo trucco: in primo luogo, definisce semplicemente la lunghezza del corpo della risposta.
Il fatto è che lo fa in byte da 8 bit. Ciò significa che la risposta non viene fornita in kilobyte, megabyte o qualsiasi altra forma di dati che siamo abituati a vedere.
A tal fine, potrebbe essere necessario eseguire alcune conversioni se si desidera raccogliere ulteriori informazioni complete sui dati restituiti.
Il valore della connessione specifica il tipo di connessione che il browser richiedente preferirebbe. Sopra, vediamo che il valore è definito come "chiuso", il che significa che una volta inviata la risposta, la connessione può essere chiusa.
Tuttavia, ci sono altre alternative. Ad esempio, potresti ricevere "keep-alive" che, ovviamente, vuole mantenere in vita la connessione per un po 'di tempo.
Ancora una volta, questo è un altro esempio di qualcosa che richiederebbe un proprio articolo per discutere pienamente; tuttavia, ciò fornisce informazioni sul tipo di connessione che il server preferisce e che può aiutarti a costruire richieste future.
Questo è davvero rilevante solo per entrambi INVIARE
e SPINGERE
richieste. In breve, definisce il tipo di corpo delle richieste.
Questo può variare in base ai dati inviati. A volte può essere un URL codificato, a volte può essere PHP, a volte può essere qualcos'altro. Indipendentemente da ciò, questo ci aiuta a verificare che i dati che ritornano nel contenuto siano in linea con quanto ci aspettiamo data la nostra richiesta.
L'elemento body contiene effettivamente le informazioni restituite dal server.
Nel nostro esempio di due articoli fa, abbiamo ricevuto una stringa JSON da Twitter. Nell'esempio sopra, stiamo ricevendo una semplice stringa di testo. In definitiva, la risposta potrebbe tornare come una forma di dati binari che necessiterebbe di un livello di deserializzazione.
In ogni caso, dipende da noi come implementatori della richiesta di sapere come decodificare correttamente la risposta prima di mostrarla ai nostri utenti.
La risposta si riferisce effettivamente al codice di risposta HTTP inviato dal server al client richiedente. Se non hai familiarità con i codici di stato HTTP, ti consiglio di consultare HTTPStat.us per un riferimento davvero valido.
In breve, una risposta è composta da un codice numerico e un messaggio basato su testo per indicare il risultato della richiesta.
Nell'esempio sopra, puoi vedere che abbiamo ricevuto il codice di stato "200" e il messaggio "OK". Il codice e la coppia di messaggi dovrebbero essere sempre sincronizzati l'uno con l'altro.
Ciò significa che se ricevi un '403' allora dovresti ricevere anche 'Proibito', o se ricevi un '404' allora dovresti ricevere un messaggio 'non trovato'.
Personalmente, ho trovato questi valori particolari importanti per la diagnosi quando i problemi sono andati male con le richieste che ho fatto.
Infine, l'array di cookie fa riferimento a qualsiasi informazione che è stata inviata attraverso il filo in base ai cookie esistenti tra il client e il server correnti che stanno effettuando la comunicazione.
A seconda della natura della richiesta, questo può o meno essere vuoto - questo varia troppo caso per caso per fornire una guida definitiva. In breve, se non sono stati stabiliti cookie tra le due connessioni, questo sarà probabilmente sempre vuoto; in caso contrario, i dati che comprendono l'array di cookie saranno specificamente basati sui cookie esistenti tra i due servizi.
Nel complesso, c'è una buona quantità di dati e questo volontà varia da richiesta a richiesta in base a ciò che si sta chiedendo di ricevere e in base alla risposta del server; comunque, il fatto è che ora lo sai che cosa aspettarsi e come gestire appropriatamente tutti i casi.
Se il peggio peggiora nel tuo lavoro, puoi sempre usare un debugger o semplicemente inserire alcune istruzioni di debug, come ad esempio print_r
o var_dump
per vedere cosa sta restituendo il server in modo che tu possa gestire gli errori con garbo.
Più avanti, rivedremo l'API HTTP di WordPress per esaminare altri metodi come wp_remote_post
e wp_remote_request
in modo da ottenere un'immagine completa dell'API HTTP.
Fino ad allora, questa serie avrà sperabilmente fornito una copertura tanto approfondita wp_remote_get
per aiutare non solo a migliorare il tuo lavoro, ma anche a stimolare la tua curiosità su ciò che è possibile quando si tratta di richieste remote.