簡體   English   中英

Tableau REST API:使用Javascript獲取令牌

[英]Tableau REST API: Using Javascript to get the Token

我是REST API的入門者,我不知道該如何進行。 我安裝了Postman並成功獲得了令牌,但是我不確定如何在javascript中發送原始XML有效內容。

 <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)以及其他所有內容。 任何幫助將不勝感激!

謝謝!

距離越來越近,您只需要使用send方法發送XML: https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send

只需在輸入時確保將XML正確編碼為javascript。 因此,如果您在XML中使用雙引號,請確保使用單引號在javascript中聲明字符串(例如var data = '<credentials name="XXX" >';

相關: 使用XMLHttpRequest發送POST數據

除了@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()函數獲取必須在所有后續調用中使用的登錄令牌。 getWorkbooks()獲取“默認”項目中的所有儀表板,但這種請求可用於所有GET類型的請求。

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

您可以在此處找到完整的分步教程和運行代碼: http : //meowbi.com/2017/10/23/tableau-fields-definition-undocumented-api/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM