Looker API 问题排查

本页面针对您在使用 Looker API 时可能会遇到的以下问题提供了问题排查步骤:

无法访问 API 端点

如果您无法访问 API 端点:

验证您的 API 凭据

如果无法访问 Looker API 端点,请先验证您的 API 凭据是否正确。如需查看您的 API 凭据,请执行以下操作:

  1. 在 Looker 中,选择左侧导航面板中的管理选项,即可访问管理面板
  2. 管理页面的左侧面板中,向下滚动,然后点击用户
  3. 在用户列表中搜索您的用户名,然后点击该用户名以修改用户页面。
  4. 点击修改 API 密钥。您可以看到客户端 ID,点击眼睛图标即可查看已配置的每个 API 密钥的客户端密钥。验证您的 API 凭据与您在脚本中使用的凭据是否匹配。

验证 API 网址

到达 API 端点的另一个常见问题是 API 主机网址不正确。大多数 Looker 实例都使用该 API 的默认网址。但是,如果 Looker 使用备用 API 路径进行安装,或者位于负载均衡器后面的 Looker 安装(例如集群配置)或任何其他代理,则可能不会使用默认网址。在这种情况下,API 主机网址必须指明面向用户的 API 主机名和端口。

Looker 管理员可以在 API 管理员设置中查看 API 主机网址(有关详情,请参阅管理设置 - API 文档页面)。如需查看 API 主机网址,请执行以下操作:

  1. 选择左侧导航面板中的管理选项,即可访问管理面板
  2. 点击管理面板中的 API
  3. 查看 API 主机网址

    如果 API 主机网址字段为空,您的 Looker 实例将使用默认格式,即:

    https://<instance_name>.cloud.looker.com:<port>
    

如需测试 API 主机网址,请执行以下操作:

  1. 打开浏览器,然后打开浏览器控制台。
  2. 输入您的 API 主机网址,后跟 /alive。例如,如果您的 API 主机网址https://company.cloud.looker.com,请输入:

    https://company.cloud.looker.com/alive
    

    如果 API 主机网址字段为空,请使用默认的 API 网址。例如,对于托管在 Google Cloud、Microsoft Azure 上以及托管在 Amazon Web Services (AWS) 上且在 2020 年 7 月 7 日或之后创建的实例,默认的 Looker API 路径使用端口 443

    https://<instance_name>.cloud.looker.com:443/alive
    

    对于托管在 AWS 上且创建于 2020 年 7 月 7 日之前的实例,默认的 Looker API 路径使用端口 19999:

    https://<instance_name>.cloud.looker.com:19999/alive
    

如果 API 主机网址正确无误,此网址将指向空白网页,而不是错误页面。

您还可以通过在浏览器控制台中查看网络响应来验证是否访问了 API。网络响应应为 200

如果这些检查失败,则问题可能是您调用 API 的方式不正确,或者您的代码中存在其他错误。检查您的 API 调用和脚本中的代码。如果这些信息正确无误,请参阅下一部分,了解如何验证携号转网。

验证 API 端口

如果之前的检查失败,并且您使用的是客户托管的 Looker 部署,则可能需要在网络基础架构上打开 API 端口。

API 端口应转发到 Looker 服务器。对于客户托管的 Looker 部署,请让网络管理员检查 API 端口设置。API 端口通常为 44319999。API 端口应采用与 Looker 实例端口相同的配置设置(默认为 9999)。您的网络管理员应验证 API 端口的以下设置是否与 Looker 实例端口的以下设置相同:

  • 代理
  • 负载均衡器
  • 防火墙

验证 API 调用网址

检查您使用的 API 调用网址是否正确。API 端点网址的格式为:

<API Host URL>/api/<API version>/<API call>

如果您使用的是默认 API 主机网址,则 API 端点网址的格式为:

https://<instance_name>:<port>/api/<API version>/<API call>

您可以从 API ExplorerAPI 参考文档文档获取 API 端点的网址格式。

例如,API 4.0 参考文档为“获取所有正在运行的查询”端点提供了以下相对路径:

/api/4.0/running_queries

因此,docsexamples.dev.looker.com Looker 实例上“获取所有正在运行的查询”端点的完整 API 端点网址将如下所示:

https://docsexamples.dev.looker.com:443/api/4.0/running_queries

API 结果是无意义文本

如果该 API 返回乱码文本的响应,则您看到的可能是 PDF、PNG 或 JPG 文件的二进制内容。某些 HTTP REST 库假定 API 响应是文本文件,因此其他类型的文件显示为二进制文本。

在这种情况下,您需要确保 HTTP REST 库将 API 响应作为二进制数据(而不是文本)处理。在某些情况下,这可能意味着在 API 调用中设置一个标志来告知 HTTP REST 库这是二进制结果,或者可能意味着以特殊方式(如作为字节流或字节数组)处理结果,而不是将结果分配给字符串变量。

API 调用无响应

如果您可以打开 API Explorer,但 API 调用没有响应,请验证 Looker 实例的 API 主机网址设置是否正确。Looker 管理员可以在 Looker 的 API 管理员设置中查看 API 主机网址(如管理设置 - API 文档页面中所述)。

“无效编码”错误

如果您在尝试进行 API 调用时收到编码错误,则可能需要在请求期间在标头中设置适当的 Content-Type。HTTP 协议标准要求任何 POST、PUT 或 PATCH 请求都必须包含 Content-Type 标头。由于 Looker API 始终使用 JSON,因此 Content-Type 标头应设置为 application/json

请注意,使用 Looker SDK 会自动为您处理此问题。

“找不到方法”错误

如果您收到“找不到方法”错误(例如 method not found: all_looks()),首先要检查的是您的 API 版本。API 4.0 中新增了多个 API 调用,或者 API 4.0 中已移除了这些调用。如需查看更新列表,请参阅 Looker API 4.0 正式版公告。

错误请求 (400) 错误

400 Bad Request 错误表示 API 调用中提供的数据无法识别。罪魁祸首通常是已损坏或无效的 JSON,也许是解析错误。大多数情况下,400 个错误已通过身份验证,因此错误响应消息会提供关于此错误的更具体的信息。

未授权 (401) 错误

API 调用出现 401 Unauthorized 错误表示相应 API 调用未正确进行身份验证。如需了解详细的问题排查信息,请参阅如何排查 401 错误?社区文章。

禁止 (403) 错误

每次用户尝试访问他们无权访问的 LookML 对象或其他内容时,Looker API 都不会返回 403 错误。在某些情况下,如果所有者可能不希望知晓特定探索、信息中心或 LookML 对象,返回 403 错误(而不是 404 错误)可以验证是否存在特定探索、信息中心或 LookML 对象。为防止出现这种情况,Looker 会在此类情况下返回 404,并且 Looker 界面中会一并显示以下错误:“找不到您请求的页面。该文件夹不存在,或者您无权查看。”

根据您的 Looker 实例的托管环境和 Looker 实例的配置,端口号和可用于访问 API 的关联网址可能会有所不同。如果使用的端口号不正确,则您可能会看到 403 错误。例如,如果您的 Looker 实例配置了默认 API 端口 443,则连接到 https://mycompany.looker.com/api/4.0/login(而不是 https://mycompany.looker.com:443/api/4.0/login)将返回 403 错误。对于客户托管的实例,您可以详细了解 Looker 启动选项,这些选项可用于定义 API 端口。

如果您使用的 Ruby SDK gem 版本过旧,也可能会出现上述情况。请务必及时更新这些信息。您可以在 https://rubygems.org/gems/looker-sdk 查看。

如果您未包含网址的 /api/<version number>/ 部分,也可能会发生这种情况。在这种情况下,如果用户尝试连接到 https://mycompany.looker.com:443/login,将会看到 403 响应。

“未找到 (404)”错误

如果出现问题,则默认错误为 404 Not Found 错误,通常是权限等问题。404 错误的响应消息会提供极少的信息(如果有的话)。这是有意为之,因为 404 错误会向登录凭据不正确或权限不足的用户显示。Looker 不想在 404 响应消息中提供具体信息,因为此信息可用于确定 Looker API 的“受攻击面”。

如果 API 登录尝试返回 404 错误,很可能是因为您的 API 客户端 ID 或客户端密钥无效(请参阅本页前面的验证 API 凭据)。API 登录 REST 端点如下所示:

  • https://<your-looker-hostname>:<port>/api/4.0/login

如果您使用的是 Swagger 代码生成 API 或 Looker SDK,请确保您的 base_url 值正确无误:

  • 对于 Swagger 代码生成客户端,base_url 应如下所示:

    • https://<your-looker-hostname>:<port>/api/4.0/
  • 对于使用 looker.ini 的 Looker SDK 实现,api_version 的值应为 4.0base_url 的值应与 Looker 实例 API 的网址相同(格式为 https://<your-looker-hostname>:<port>)。looker.ini 文件示例如下:

    # api_version should be 4.0
    api_version=4.0
    base_url=https://<your-looker-hostname>:<port>
    

您也可能在登录后收到 404 错误。如果您已登录,但收到 404 错误,则表示您无权使用刚才调用的 API 命令。

方法不允许 (405) 错误

405 Method Not Allowed 错误表示服务器知道请求方法,但目标资源不支持此方法。

服务器必须在 405 状态代码响应中生成 Allow 标头字段。该字段必须包含目标资源支持的方法列表。

例如,您可能会在 Looker 中遇到此问题,一种可能的情况是您尝试使用 update_dashboard() 端点更新 LookML 信息中心的元数据。不支持通过 Looker API 更改 LookML 信息中心的 id 参数,因此会出现 405 错误。

冲突 (409) 错误

409 Conflict 响应状态代码表示请求与目标资源的当前状态存在冲突。

冲突最有可能在响应 PUT 请求时发生。在上传比服务器上现有文件更早的文件时,会出现此错误的常见非 Looker 示例,从而导致版本控制冲突。

尝试使用 API 检出新的 git 分支时,或使用 create_group()create_dashboard() 等端点时,您可能会在 Looker 中遇到此错误。在这些情况下,请检查您尝试创建的对象是否已存在。

验证 (422) 错误

当请求中的某些内容未能执行数据检查时,就会发生验证错误。请求存在以下一种或多种错误(错误响应将指明具体错误):

  • 缺少字段:存在未提供的必需参数(错误响应会指明缺少哪个字段)。
  • 无效:提供的值与现有值不匹配,或者值的格式有误。例如,如果您尝试创建 Look,但您在 API 调用中提供的查询 ID 与现有查询不匹配,则会收到验证错误。
  • 已存在:API 调用尝试创建的对象具有您的 Looker 实例上已存在的 ID 或名称。例如,数据库连接名称必须是唯一的。如果您尝试使用现有连接的名称创建新的数据库连接,则会收到包含代码 already_exists 的验证错误。

请参阅错误响应消息,详细了解哪些字段可能缺失或必填,或者哪些字段可能包含无效值。响应消息将同时提供所有验证错误。因此,如果您既有缺失字段又有错误的字段,错误响应将列出 API 调用的所有问题。

下面是一个响应示例:

{
  "message": "Validation Failed",
  "errors": [
    {
    "field": "dialect",
    "code": "missing_field",
    "message": "This field is required.",
    "documentation_url": "http://docs.looker.com/"
    },
    {
    "field": "db_timezone",
    "code": "invalid",
    "message": "Must specify a database timezone when user timezones are activated.",
    "documentation_url": "http://docs.looker.com/"
    }
  ],
    ...

在本例中,API 调用缺少必需的 dialect 字段,并且 db_timezone 中提供的值也无效。

请求过多 (429) 错误

429 Too Many Requests 响应状态代码表示用户在指定时间段内发送的请求过多(“速率限制”)。您可以参阅 Looker 社区中的一次可发送的 API 请求数量是否有限制?,详细了解 Looker 的速率限制政策

内部服务器错误 (500) 错误

500 Internal Server Error 响应代码表示服务器遇到了意外情况,阻止其完成请求。

此错误响应是通用的“综合”响应。这通常表示服务器无法找到要在响应中返回的更具体的 5xx 错误代码。来自 Looker 的任何 500 响应都属于意外情况,因此,如果您在尝试与 Looker 互动时持续看到此错误,我们建议您提交支持请求