我掌握了 Looker 的 API Explorer。现在该做什么?

使用 Looker 的 API Explorer,用户几乎可以即时测试 API 调用,而无需编写任何代码。如果您已从 Looker Marketplace 安装了 API Explorer 扩展程序,您可以点击 Looker 应用菜单中的 API Explorer,打开 API Explorer 并查看当前的 API 文档。如果您尚未安装 API Explorer 扩展程序,可以从 Looker Marketplace 的应用部分安装该扩展程序。

或许通过使用 API Explorer,您已经确定了动态创建 Look、更新基础查询以及将其安排给公司的各个利益相关方的最佳工作流。接下来常见的问题是,如何在 API Explorer 之外运行这些调用或函数?您可以通过以下三种常见方式访问该 API:

  1. Looker 的 API 软件开发套件 (SDK)
  2. HTTP 请求
  3. 软件开发工具

本页将向您介绍如何使用这些方法。

准备工作:身份验证和端口

无论您以何种方式访问 Looker 的 API,都需要先获取两条信息:您的个人 API 身份验证(采用客户端 ID 和客户端密钥的形式)和 Looker 实例使用的端口号。

如需查找客户端 ID 和客户端密钥,请执行以下操作:

  • 如果您是 Looker 管理员,请在 Looker 界面中访问用户页面,找到您感兴趣的用户,然后前往修改密钥
  • 如果您不是 Looker 管理员,会从 Looker 管理员那里收到客户端 ID 和客户端密钥。
关于客户端 ID 和客户端密钥,请务必牢记,不要与任何人分享这些密钥

对于托管在 Google Cloud 或 Microsoft Azure 上的 Looker 实例,以及托管在 Amazon Web Service (AWS) 上且在 2020 年 7 月 7 日或之后创建的实例,默认的 Looker API 路径使用端口 443。对于在 2020 年 7 月 7 日之前在 AWS 上创建的 Looker 实例,默认的 Looker API 路径使用端口 19999。

如果您托管自己的实例,请咨询系统管理员了解端口号。可在 Looker 管理控制台的 API 主机网址字段中进行设置。如需查看此信息,请前往 Looker 中的管理菜单下拉菜单,然后选择 API

如需详细了解端口,请转到 Looker API 使用入门文档页面。以下示例使用的 API 端口为 19999,但您应确认实例使用的端口。

方法 1:使用 Looker 软件开发套件 (SDK)

Looker 以 PythonRubyTypescript 和 JavaScriptSwiftKotlinR 提供官方 Looker API 客户端 SDK。您可以在 Looker 的 sdk-examples GitHub 代码库中找到源代码和示例。

SDK 提供的工具或库允许开发者与给定平台或应用进行交互。在这种情况下,Looker 的 SDK 通常包含 API。借用 Web 开发者兼作家 Kristopher Sandoval 的例子来说,“API 就像电话线,可在住宅内外进行通信。SDK 是房子本身及其所有内容。"他在一篇精彩的文章《API 和 SDK 有何区别?》中介绍了 SDK 的含义及其与 API 的关系。

Looker 的 SDK 包含您可能想要或需要使用的所有 API 端点,并且这些端点的打包方式支持您使用自己选择的编程语言与 Looker 无缝交互。借助这些函数,您可以执行以下任务:

  • 将数据发送到 Looker
  • 从 Looker 获取数据
  • 在 Looker 中更新数据
  • 删除 Looker 中的数据
下一节将更详细地介绍这些操作之间的差异。

以下示例展示了如何使用 Python SDK 更新用户:

  1. 使用 looker_sdk.init 初始化会话。
  2. 使用 sdk.update_user 更新用户。您可以传递 user_id 来指定要更新的用户。
  3. 使用 models.WriteUser 指定要如何更新用户。

    #### Initialize API/SDK for more info go here: https://pypi.org/project/looker-sdk
    from looker_sdk import methods40, models
    sdk = looker_sdk.init40()
    me = sdk.me()
    # print(me)
    new_friend = sdk.update_user(user_id=29,
    body=models.WriteUser(first_name="newnew", last_name="new_again"))
    print(new_friend)
  

使用我们的某个 SDK 时,如果您使用 Visual Studio Code 等 IDE 并按住 Command 键点击(在 Visual Studio Code 的默认设置中为 F12),然后选择转到定义,您可以查看所有方法以及方法接受或返回的所有参数。或者,您也可以在 SDK GitHub 代码库中查看这些文件,具体方法是查找方法和模型文件。

方法 2:使用 curl 或请求库发出 HTTP 请求

如果您不想编写脚本或花费数月或数年的时间学习新的编程语言,该怎么办?在这种情况下,您可以使用 curl 发出 HTTP 请求,以利用 Looker 的 API。

HTTP 请求会将消息发送到目的地,目的地可以是服务器、手机,甚至是您的智能电视。有几种不同类型的 HTTP 请求。如何将这些请求与 Looker 的 API 搭配使用取决于您在 API 调用中传递的方法的性质。有些方法可为您提供数据,有些方法会向 Looker 发送数据,有些方法可更新数据,有些方法用于从 Looker 中删除或移除数据。

操作 方法
创建 POST
已读 GET
更新 PUT
删除 DELETE

我们开始打冰壶吧。对于某些背景信息,Zendesk 提供了非常实用的教程:安装和使用 c网址

如需开始向 Looker API 发出 HTTP 调用,您首先需要使用客户端 ID 和客户端密钥调用 Looker API 的 login 端点。这将创建访问令牌。然后,您可以获取此访问令牌,并在每次调用时传递它。访问令牌可确保调用来自获授权的用户。

本页使用了几种表示法来指明应将代码示例中的文本替换为您的信息。Looker 托管的实例网址采用 https://<hostname>.<subdomain>.<domain>.com 格式;如果您在本页的示例中看到此符号,请将 <hostname>.<subdomain>.<domain>.com 部分替换为 Looker 实例的网址。此外,我们使用符号 <value> 来指明您应在何处输入适当的值,并替换代码示例中的 <value>。例如,在显示 client_id=<value>&client_secret=<value> 的以下代码中,将第一个 <value> 替换为您的 client_id,将第二个 <value> 替换为您的 client_secret

以下是用于获取访问令牌的 curl 命令:

  curl -d "client_id=<value>&client_secret=<value>" https://<hostname>.<subdomain>.<domain>.com:19999/login
  

响应如下:

  {"access_token":"ABCDEFGHIJLMNOP1234","token_type":"Bearer","expires_in":3600}
  

收到令牌即表示 Looker 已识别您的 API 凭据。系统会将令牌与 expires_in 值一起返回,该值表示令牌的有效时长。通常约为 60 分钟(3,600 秒)。

现在,您已经有了访问令牌,可以随意进行任何调用了。在 Looker API 4.0 参考文档文档中,所有端点都按 API 版本列出。请注意,Looker 的社区网站是一个很好的资源,您可以在此网站上向其他 Looker 用户询问他们如何利用 API、学习最佳实践,或与其他用户分享您在使用 API 时取得的成就。

假设您想要创建一个新用户。具体操作步骤如下:

  1. 编写一个传递令牌的 curl POST 请求,以告知 Looker 您已获授权。
  2. 添加正文(在本例中采用 JSON 格式),以告知 Looker 您希望新用户具有哪些属性。(API 调用有一些必填字段,因此请参阅 Looker API 4.0 参考文档。)
  3. 将 curl 表示法替换为要使用的端点,在本例中为 users

  curl -H "Authorization: token <value>
  " -H "Content-Type: application/json" -d "{\"first_name\": \"<value>\",\"last_name\": \"<value>\", \"email\":\"<value>\"}" https://<hostname>.<subdomain>.<domain>.com:19999/api/4.0/users

-H 代表标头,-d 代表数据。如需详细了解 curl 命令,请参阅此 GitHub gist

您刚刚创建了一个用户,其名字、姓氏和电子邮件地址具有您之前输入的值。

如果您想在脚本中编写这些命令,以便每次执行此工作流时都无需输出这些命令,该怎么办?您可以使用 Python 的 requests等编程语言和库。

例如,以下脚本使用 requests 库通过 Look ID(looks 调用中的 <value>)获取 Look,应用新的过滤条件,然后将结果下载为 CSV 文件:

  import requests
  ID = '<value>'
  SECRET = '<value>'
  PARAMS = {'client_id':<value>,
            'client_secret': <value>}
  URL = "https://<hostname>.<subdomain>.<domain>.com:19999/api/4.0/login"
  r = requests.post(url = <value>, params = <value>, verify=False)
  data = r.json()
  token = data['access_token']
  print(token)
  headers = {'Authorization': "Bearer " + token}
  print(headers)
  look_url = "https://<hostname>.<subdomain>.<domain>.com:19999/api/4.0/looks/<value>"
  look = requests.get(look_url, headers=headers, verify=False)
  json = look.json()
  query = json['query']
  ### ADD MODEL HERE
  ### ADD FILTER
  body = {
      "model":"<value>",
      "view":query['view'],
      "fields":query['fields'],
      "filters":{<value>}
  }
  print(body)
  run_inline = "https://<hostname>.<subdomain>.<domain>.com:19999/api/4.0/queries/run/csv"
  run_query = requests.post(run_inline, headers = headers, json=body, verify=False)
  print(run_query._content)
  print(run_query.url)

选项 3:软件开发工具

借助 PostmanPaw 等工具,用户可以通过图形界面 (GUI) 与 API 端点互动或利用 API 端点。软件开发工具适用与 HTTP 请求相同的流程。第 1 步是使用客户端密钥和客户端 ID 登录。然后,将访问令牌存储为不记名令牌,以便为随后的 API 调用授权,如 Postman 中的此处所示。

Postman GUI,由 Looker POST 网址、客户端密钥和客户端 ID 填充。

借助 Postman 或其他软件开发工具(如 Paw),您可以在其界面中指定授权、正文、参数和标头,然后为您生成请求。当您点击发送时,它们也会执行相应端点。

加油!(但请注意)

现在,您可以通过 SDK、HTTP 请求和软件开发工具使用 Looker 的 API,那就开始测试吧!不过,请注意,虽然使用该 API 有助于自动执行在用户离开贵公司后创建或重新分配时间表等流程,但不当使用该 API 可能会损坏实例。

一般注意事项:

  • 修改权限或删除用户时,特别是批量删除时,请务必谨慎小心。您可能会删除或锁定许多用户(包括管理员),而此类操作无法轻松撤消。
  • API 调用会增加实例用量,因此请尽量将其安排在非工作时间,以便获得最佳性能。
  • 每个实例服务器上都有一个打开文件限制,因此不负责任的 API 使用可能会导致实例崩溃。
  • 先小规模测试工作流和功能,然后再将其添加到生产环境。
  • 切勿分享您的 API 凭据,也不要将其放在其他用户可以访问的文件中。

如果您有疑问或想要分享有趣的想法,请访问 Looker 社区。如果您认为我们可以改进的地方,或者您希望在我们的文档中添加其他示例,欢迎随时告诉我们。