Stworzyłem usługę AngularJS, która uderza w interfejs API REST Salesforce bezpośrednio od klienta. Jednak nie udało mi się go uruchomić z powodu tych samych ograniczeń pochodzenia. Nawet podczas uzyskiwania dostępu do nieuwierzytelnionych usług REST i próbowania zarówno $ http, $ http.json i Ajax. Próbowałem również wielu kombinacji Json, Jsonp itp.Jaki jest poprawny wzorzec architektoniczny wywołania REST w domenie krzyżowej w AngularJS?
Biorąc pod uwagę, że miałem tak wiele problemów, myślę, że moje ogólne podejście jest nieprawidłowe. Być może muszę skonfigurować serwer proxy do tego? Moim zapleczem jest Firebase, więc nie mam obecnie własnego serwera.
Nie wierzę, że interfejs API Salesforce obsługuje jednostki COR i nie można tego zmienić.
Oto przykład tego, co próbowałem użyć $ http i 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) {
}
});
Tak, jeśli punkty końcowe Salesforce nie obsługują CORS to nie można uzyskać dostęp do swoich usług tylko z klientem. Musisz uruchomić prosty serwer proxy w tej samej domenie, w której znajduje się twoja aplikacja internetowa, która przekazuje żądania do punktów końcowych API SalesForce i wysyła twoje wyniki. – Anant
Dzięki. To pomocne – wisemanIV
Konfiguruję prosty serwer proxy Ruby Sinatra i działa idealnie. Moja aplikacja to HTTPS działająca w wielu subdomenach, więc wciąż ustawiam nagłówek odpowiedzi kontroli dostępu w kodzie RUby - odpowiedź ['Access-Control-Allow-Origin'] = '*' – wisemanIV