我精通 Looker 的 API Explorer。該怎麼處理?

使用 Looker 的 API Explorer,使用者幾乎可以立即測試 API 呼叫,完全不需要編寫任何程式碼。如果您已從 Looker Marketplace 安裝 API Explorer 擴充功能,請按一下 Looker 應用程式選單中的「API Explorer」,開啟 API Explorer 並查看目前的 API 說明文件。如果您尚未安裝 API Explorer 擴充功能,可以前往 Looker Marketplace 的「應用程式」專區安裝。

或許您已透過 API Explorer 找出最佳工作流程,可用於動態建立 Look、更新基礎查詢,並排定將 Look 提供給公司內部各個利害關係人。接下來常見的問題是,如何在 API Explorer 以外執行這些呼叫或函式?存取 API 的常見方式有三種:

  1. Looker API 軟體開發套件 (SDK)
  2. HTTP 要求
  3. 軟體開發工具

本頁面將逐步說明如何使用這些方法。

開始前:驗證和連接埠

無論您如何存取 Looker API,都必須先取得兩項資訊:個人 API 驗證資訊 (以用戶端 ID 和用戶端密碼的形式),以及 Looker 例項使用的連接埠號碼。

如要查看用戶端 ID 和用戶端密碼,請按照下列步驟操作:

  • 如果您是 Looker 管理員,請前往 Looker UI 中的 使用者頁面,找到您感興趣的使用者,然後點選「編輯金鑰」
  • 如果您不是 Looker 管理員,則會從 Looker 管理員收到用戶端 ID 和用戶端密鑰。
關於用戶端 ID 和用戶端密鑰,最重要的一點是請勿與任何人分享這些金鑰。

對於在 Google Cloud 或 Microsoft Azure 上託管的 Looker 執行個體,以及在 2020 年 7 月 7 日當天或之後建立的 Amazon Web Service (AWS) 執行個體,預設的 Looker API 路徑會使用 443 連接埠。對於在 AWS 上託管的 Looker 執行個體,如果是在 2020 年 7 月 7 日前建立,預設 Looker API 路徑會使用 19999 這個連接埠。

如果您自行代管執行個體,請向系統管理員洽詢連接埠號碼。您可以前往 Looker 的管理員面板,在「API 主機網址欄位中設定這個值。如要查看這項資訊,請前往 Looker 中的「Admin」選單下拉式選單,然後選取「API」

如要進一步瞭解端口,請參閱「Looker API 入門」說明文件頁面。下列範例使用 19999 的 API 連接埠,但您應確認執行個體使用的連接埠。

方法 1:使用 Looker 軟體開發套件 (SDK)

Looker 提供 PythonRubyTypeScript 和 JavaScriptSwiftKotlinR 的官方 Looker API 用戶端 SDK。您可以在 Looker 的 sdk-examples GitHub 存放區中找到原始碼和範例。

SDK 提供工具或程式庫,可讓開發人員與特定平台或應用程式互動。在這種情況下,Looker 的 SDK 通常會包含 API。網頁開發人員兼作者 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,並按住滑鼠按一下 (在 Visual Studio Code 的預設設定中為 F12),然後選取「go to definitions」,即可查看所有方法和方法接受或傳回的所有參數。您也可以在 SDK GitHub 存放區中查看這些檔案,方法是尋找方法和模型檔案。

選項 2:使用 curl 或 requests 程式庫發出 HTTP 要求

如果您不想編寫指令碼,或不想花上數月或數年學習新的程式設計語言,在這種情況下,您可以使用 curl 提出 HTTP 要求,以便使用 Looker 的 API。

HTTP 要求會將訊息傳送至目的地,例如伺服器、手機,甚至是智慧型電視。有幾種不同的 HTTP 要求。您如何在 Looker API 中使用這些要求,取決於您在 API 呼叫中傳遞的方法性質。有些方法會提供資料,有些方法會將資料傳送至 Looker,有些方法會更新資料,有些方法則會刪除或移除 Looker 中的資料。

動作 方法
建立 POST
閱讀 GET
更新 PUT
刪除 DELETE

讓我們開始打冰壺吧。如需相關背景資訊,Zendesk 提供一篇很棒的教學課程:安裝及使用 cURL

如要開始向 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 端點互動或加以利用。軟體開發工具和 HTTP 要求的處理程序相同。第一步是使用用戶端密碼和用戶端 ID 登入。接著,將存取權杖儲存為不記名憑證,以便授權後續的 API 呼叫,如 Postman 中所示。

Postman GUI,已填入 Looker POST 網址、用戶端密鑰和用戶端 ID。

Postman 或其他軟體開發工具 (例如 Paw) 可讓您在 UI 中指定授權、內容、參數和標頭,然後為您產生要求。您按下「傳送」時,這些函式也會執行端點。

出發吧!(但請小心)

您現在可以透過 SDK、HTTP 要求和軟體開發工具使用 Looker API,趕快去測試看看吧!不過,請注意,雖然使用 API 可協助自動化流程 (例如在使用者離職後建立或重新指派排程),但不當使用 API 可能會損害執行個體。

請注意下列一般事項:

  • 編輯權限或刪除使用者時請小心,尤其是大量操作時。您可以刪除或鎖定多位使用者 (包括管理員),而這類操作無法輕易復原。
  • API 呼叫會增加執行個體用量,因此請盡量在非上班時間排定 API 呼叫,以便獲得最佳效能。
  • 每個執行個體伺服器都有開放檔案限制,因此不當使用 API 可能會導致執行個體當機。
  • 先小規模測試工作流程和函式,再將其加入正式版。
  • 請勿分享您的 API 憑證,也不要將憑證留在其他使用者可存取的檔案中。

如有任何問題或想分享有趣的想法,歡迎造訪 Looker 社群。如果您有任何建議或希望我們在說明文件中加入其他範例,歡迎與我們聯絡。