无法通过 Tableau REST return 用户收藏夹 API

Unable to return user favorites via Tableau REST API

更新:2019 年 9 月。

这个 API 调用现在可以正常工作了。 Tableau 端的问题似乎已经解决,现在调用 return 是正确的数据。

============================================= ==================

我正在通过 C# 使用 Tableau REST API 来尝试获取用户收藏夹列表。 我知道用户有一些,因为是我。 我尝试过使用 API 版本 2.8、3.0、3.1 和 3.2,但几乎没有任何乐趣。 2.8 和 3.0 响应:

<?xml version='1.0' encoding='UTF-8'?>
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.8.xsd"> //3.0.xsd when using API Version 3.0
     <favorites/> //There should be a plethora of favorites of all varieties in here.
</tsResponse>

3.1 和 3.2 给我一个 (404) Not found。

我在 C# 中的代码是:

public static string QueryFavourites(string APIVersion, string AuthToken, string SiteID, string UserID)
    {
        string result = "";
        try
        {
            string url = $@"{Server}/api/{APIVersion}/sites/{SiteID}/favorites/{UserID}";
            // Create the web request 
            WebRequest request = WebRequest.Create(url) as WebRequest;
            request.PreAuthenticate = true;
            request.Headers.Add($"x-tableau-auth: {AuthToken}");

            // Get response 
            using (WebResponse response = request.GetResponse())
            {
                // Get the response stream 
                StreamReader reader = new StreamReader(response.GetResponseStream());

                // Read the whole contents and return as a string 
                result = reader.ReadToEnd();
            }
            return result;
        }
        catch(Exception E)
        {
            logger.Error("Error! System Says: " + E.Message);
            return result;
        }
    }

我知道该方法有效,因为它用于多个其他 API 调用,每个调用使用不同的 URL(取决于调用)。 有谁知道这是画面端还是我端的问题? 显然它应该与我们拥有的 Tableau Server 2.8 或更高版本一起使用。 (我想我们是 运行 2018.1)

是否有人能够使用 tableau REST API 获得用户的收藏夹列表? 我哪里错了?

(我也在 Tableau Forum 上发布了问题。)

更新:

我在下面的屏幕截图中包含了请求的 CURL 和 Headers 以及结果。 (我使用 'Restlet Client' 多于 'Postman',所以屏幕截图来自前者。)ID 和身份验证令牌已被删除,因为它们是敏感信息,我认为我的公司不会乐意我把他们在面向互联网的 public 上。 所有 ID 和授权密钥均大小写正确且显示正确。它们被成功用于其他几个 API 调用,并通过 API.

直接从 Tableau 中提取

我发现的例外情况是无法找到我正在调用的 API 的版本。所以 v2.6 - v2.8 和 v3.0 都是 "work"。其他版本 return 一个 404001 VERSION_NOT_FOUND 错误。

我会采取的方法是:

  1. Query a user on the site.(收藏的用户)

  2. 检查用户是否确实:与您进行身份验证的用户相同;以及您要查询收藏夹的同一用户

  3. 如果相同,请尝试使用 REST 添加收藏夹 API (DataSource, View or Workbook)

  4. Get the favorites for the user,你收藏的datasource/view/workbook应该在里面

如果你想Update the user, Add user to site or Add user to Group,我已经添加了文档链接

您可以根据自己的选择 Postman/tool 执行这些操作。

您还可以尝试确保查询另一个用户(或同一用户)的用户是服务器管理员(为了安全起见),并确保您是另一个(或相同)用户。

希望对您有所帮助!

编辑:也许您可以尝试向站点添加一个具有常规组的新用户,确保您也是该站点的成员。之后添加收藏夹并为组常规用户获取收藏夹。如果这不起作用,您可以验证除了管理员之外,是否也无法为组常规用户获得收藏夹。

终于知道是怎么回事了。 它没有按预期工作。 无论您在请求中输入什么用户 ID,它只会 return 用户收藏夹用于在身份验证令牌中进行身份验证的用户。 当我们切换经过身份验证的用户时,与 Tableau 支持人员进行了通话并无意中弄明白了。 我会把它留在这里,以防其他人遇到同样的问题。