2017-08-14 248 views
0

我是一個使用REST API的完整初學者,我無法弄清楚我將如何繼續。 我安裝了Postman,併成功地獲得了令牌,但我不確定如何在JavaScript中發送原始XML有效負載。Tableau REST API:使用Javascript獲取令牌

<tsRequest> 
     <credentials name ="XXX" password="YYY" > 
      <site contenturl = "" /> 
     </credentials> 
</tsRequest> 

我:

httpRequest.open('POST', 'http://MY-SERVER/api/2.4/auth/signin', false); 
httpRequest.setRequestHeader("Content-type", "application/xml"); 

不知道如何添加XML有效載荷。我可以訪問Tableau Server(MY-SERVER)以及其他所有功能。 任何幫助將不勝感激!

謝謝!

回答

0

除了@AnilRedshift答案,這裏的功能代碼:

login_details=[]; 
function getToken() { 

var url = "http://yourServerAddress/api/2.0/auth/signin"; 
var params = "<tsRequest><credentials name='Username' password='UserPassword' ><site contentUrl='' /></credentials></tsRequest>"; 

    return zuo = new Promise(function(resolve,reject){ 

      var xhr = new XMLHttpRequest(); 
      xhr.open("POST", url, true); 
      xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xhr.withCredentials = true; 
      xhr.onload= function(){ 
       if (this.status === 200) { 
        var parsed_xml = JSON.parse(JSON.stringify(x2js.xml_str2json(xhr.responseText))) 
        login_details.push(parsed_xml.tsResponse.credentials._token);     login_details.push(parsed_xml.tsResponse.credentials.site._id); 
        resolve(login_details); 
       } 
      } 
      xhr.onerror=reject; 
     xhr.send(); 

     }) 


} 

function getWorkbooks(){ 

var url = "http://serveraddress//api/2.3/sites/"+login_details[1]+"/workbooks?pageSize=1000"; 

    return zuo = new Promise(function(resolve,reject){ 

      var xhr = new XMLHttpRequest(); 
      xhr.open("GET", url, true); 
      xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xhr.setRequestHeader("X-Tableau-Auth",login_details[0]); 
      xhr.onload= function(){ 
       if (this.status === 200) { 

        var workbooks = JSON.parse(JSON.stringify(x2js.xml_str2json(xhr.responseText))) 

        for (var f=0;f<workbooks.tsResponse.workbooks.workbook.length;f++){ 
         if(workbooks.tsResponse.workbooks.workbook[f].project._name=="Default"){ 
          workbooks_list.push(workbooks.tsResponse.workbooks.workbook[f]._id) 
         } 
         resolve(); 
        } 

       } 
      } 
      xhr.onerror= function(){ 


        console.log(xhr.responseText);    
      } 

     xhr.send(); 

     }) 


} 

調用的代碼:

getToken() 
    .then(function(login_details){ 
     console.log(login_details[0]+"/"+login_details[1]); 
    }) 
    .then(function(){ 
     getWorkbooks(); 
    }) 

getToken()函數g請注意必須在所有後續調用中使用的登錄令牌。 getWorkbooks()提取'Default'項目中的所有儀表板,但這種請求可以用於所有GET類型的請求。

請注意,此方法使用硬編碼值的密碼和用戶名,這通常不是最佳做法。使用服務器端腳本或加密會更好(更好,但仍然有flavs)。

您可以找到教程一步和運行代碼在這裏整步: http://meowbi.com/2017/10/23/tableau-fields-definition-undocumented-api/

相關問題