Ho creato un servizio AngularJS che sta colpendo l'API REST di Salesforce direttamente dal client. Tuttavia, non sono stato in grado di farlo funzionare a causa delle stesse restrizioni di origine. Anche quando si accede a servizi REST non autenticati e si provano sia $ http, $ http.json e Ajax. Ho anche provato molte combinazioni di JSON, JSONP ecc.Qual è il modello architettonico corretto per la chiamata REST tra domini in AngularJS?
Dato che ho avuto così tanti problemi, penso che il mio approccio generale sia errato. Forse ho bisogno di configurare un server proxy per questo? Il mio back-end è Firebase, quindi attualmente non ho il mio server.
Non credo che l'API Salesforce supporti i COR e non posso cambiarlo.
Ecco un esempio di ciò che ho provato utilizzando $ http e Ajax.
return $http.jsonp('https://na1.salesforce.com/services/data/',{
headers: {
'Content-type': 'application/json', 'Accept': 'application/json'
}}).
success(function (data, status, headers, config) {
callback(data);
console.debug(data.json);
}).
error(function (data, status, headers, config) {
console.debug("getVersions: failed to retrieve data: "+eval(data));
});
$.ajax({
url: 'https://na15.salesforce.com/services/data',
type: "GET",
dataType: "jsonp",
beforeSend: function(xhrObj){
xhrObj.setRequestHeader("Content-Type","application/json");
xhrObj.setRequestHeader("Accept","application/json");
xhrObj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
},
success: function (data) {
console.debug(data);
callback(data);
},
error: function(data) {
}
});
Sì, se i punti finali di Salesforce non supportano CORS, allora non è possibile accedere ai propri servizi dal solo il client. È necessario eseguire un semplice server proxy nello stesso dominio in cui è presente l'app Web, che inoltra le richieste agli endpoint dell'API Salesforce e invia i risultati. – Anant
Grazie. È utile – wisemanIV
Ho impostato un semplice proxy Ruby Sinatra e funziona perfettamente. La mia app è HTTPS in esecuzione su più sottodomini, quindi imposto ancora l'intestazione di risposta del controllo accessi nel codice RUby - response ['Access-Control-Allow-Origin'] = '*' – wisemanIV