Un metodo per effettuare una richiesta dati (in GET o POST) da un server che risiede in un dominio diverso da quello del client (superando pertanto la barriera del cross-domain per la famosa same-origin policy), ad esempio un'interrogazione alle API, è quello di utilizzare JSONP, acronimo di JSON con padding.
Quello che viene restituito dal server non è altro che un JSON racchiuso come parametro all'interno di una funzione (da qui il termine "padding") che potrà successivamente essere interpretata dal browser e gestita.
In rete ci sono diversi esempi che ne dimostrano l'uso con jQuery e la relativa funzione 'ajax', in questo articolo mostrerò come poter gestire la risposta JSONP ad una chiamata alle API con Google Apps Script.
Di seguito un esempio di interrogazione alle API per effettuare un'autenticazione ad un web service esterno ed ottenerne il token di accesso per l'utilizzo dei relativi servizi (notare il parametro 'callback' nell'url interrogato):
var url = "https://api.esempio.com/services/login?username=xxxxx&password=yyyyy&callback=JsonPCallBack";
var options = {};
var response = eval(UrlFetchApp.fetch(url, options).getContentText());
function JsonPCallBack(jsonparam) {
var token = jsonparam.token;
return token;
}
In questo modo, all'interno della variabile 'response', avrò il mio token da utilizzare per usufruire dei servizi di cui necessito su quel particolare web services.
Per spiegare quello che succede, effettuando la chiamata:
UrlFetchApp.fetch(url, options).getContentText()
Quello che otteniamo è una risposta simile alla seguente:
JsonPCallBack({"token":"qwerty12345asdfg"})
...che ha appunto tutto l'aspetto di una chiamata ad una funzione di nome 'JsonPCallBack' (che è il nome che è stato indicato come valore del parametro 'callback' all'interno dell'url dell'API) che passa un JSON come parametro il quale contiene la risposta di nostro interesse (il token).
Per poter recuperare il parametro è necessario creare una funzione che lo passi e che abbia lo stesso nome di quella definita e gestirne il contenuto come un comune JSON (come nell'esempio appena visto).
Poiché la risposta in JSONP viene interpretata come una stringa, e pertanto a condizioni normali non avrebbe alcun effetto e non effettuerebbe alcuna chiamata alla funzione in essa contenuta, è necessario avvalersi del metodo eval() al fine di eseguire tale codice JavaScript:
eval(UrlFetchApp.fetch(url, options).getContentText())
Se ci sono domande o dubbi sentitevi liberi di lasciare un commento qua sotto!
Nessuno ha ancora commentato questo articolo, fallo tu per primo!
Scrivi un Commento