Looker の API Explorer をマスターしました。次のアクション

Looker の API Explorer を使用すると、コードを 1 行も記述することなく、API 呼び出しをほぼ瞬時にテストできます。Looker Marketplace から API Explorer 拡張機能をインストールしている場合は、Looker の [アプリケーション] メニューで [API Explorer] をクリックして API Explorer を開き、現在の API ドキュメントを表示できます。API Explorer 拡張機能をインストールしていない場合は、Looker Marketplace の [アプリケーション] セクションからインストールできます。

API Explorer を使用すれば、Look の作成、基盤となるクエリの更新、社内のさまざまな関係者へのクエリをスケジューリングする最適なワークフローを見つけることができます。よくある次の質問は、これらの呼び出しや関数を API Explorer の外部で実行する方法です。API にアクセスする一般的な方法は 3 つあります。

  1. Looker の API ソフトウェア開発キット(SDK)
  2. HTTP リクエスト
  3. ソフトウェア開発ツール

このページでは、これらのメソッドの使用方法について説明します。

始める前に: 認証とポート

Looker の API にアクセスする方法にかかわらず、まず 2 つの情報(個人の 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 を使用します。2020 年 7 月 7 日より前に作成された AWS でホストされている Looker インスタンスの場合、デフォルトの Looker API パスはポート 19999 を使用します。

独自のインスタンスのホストの場合は、ポート番号をシステム管理者に確認してください。Looker の管理パネルの [API ホスト URL] フィールドで設定されている可能性があります。確認するには、Looker で [管理者] メニュー プルダウンを選択して [API] を選択します。

ポートの詳細については、Looker API スタートガイドのドキュメント ページをご覧ください。次の例では API ポート 19999 を使用していますが、インスタンスによって使用されているポートを確認する必要があります。

オプション 1: Looker ソフトウェア開発キット(SDK)を使用する

Looker では、以下の公式 Looker API クライアント SDK を提供しています。PythonRubyTypescript と JavaScriptSwiftKotlinR。ソースコードとサンプルは、Looker の sdk-examples GitHub リポジトリにあります。

SDK には、デベロッパーが特定のプラットフォームやアプリケーションを操作できるようにするツールやライブラリが用意されています。この場合、通常、Looker の SDK には API が含まれています。ウェブ デベロッパーと著作者である Kristopher Sandoval 氏の例を借りると、API は電話の回線であり、家の内外での通信を可能にします。SDK は住宅そのものであり、すべてのコンテンツです。」SDK と API の関係については、API と SDK の違いという優れた記事で説明されています。

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)
  

Google の SDK のいずれかを使用するときに、Visual Studio Code などの IDE やコマンド クリック(Visual Studio Code のデフォルト設定で F12)を使用し [定義に移動] を選択すると、すべてのメソッドとメソッドによって受け入れられる、または返されるすべてのパラメータが表示されます。または、SDK GitHub リポジトリに表示されます(メソッドとモデルファイルを探してください)。

オプション 2: curl またはリクエスト ライブラリを使用した HTTP リクエスト

スクリプトを書きたくない、新しいプログラミング言語を学ぶのに何か月も何年もかけたくない場合はどうすればいいのでしょうか?その場合は、curl を使用して HTTP リクエストを行い、Looker の API を利用できます。

HTTP リクエストは、サーバーのほか、スマートフォンやスマートテレビなどの宛先にメッセージを送信します。HTTP リクエストにはいくつかの種類があります。Looker の API でこれらのリクエストを使用する方法は、API 呼び出しの一部として渡すメソッドの性質によって異なります。Looker にデータを送信する方法、Looker にデータを送信する方法、Looker からデータを削除するメソッドもあります。

アクション メソッド
作成 POST
Read GET
更新 PUT
削除 DELETE

カーリングを始めましょう。背景については、Zendesk の優れたチュートリアル「cURL のインストールと使用」をご覧ください。

Looker API への HTTP 呼び出しを開始するには、まず、クライアント ID とクライアント シークレットを使用して Looker API の login エンドポイントを呼び出す必要があります。これにより、アクセス トークンが作成されます。次に、このアクセス トークンを取得して、呼び出しごとに渡します。アクセス トークンにより、呼び出しが承認されたユーザーからのものであることを確認できます。

このページでは、コードサンプル内のテキストをお客様の情報で置き換えるべき箇所を示すために、いくつかの表記を使用しています。Looker ホスト型インスタンスの URL の形式は https://<hostname>.<subdomain>.<domain>.com です。このページのサンプルでこの表記が使用されている場合は、<hostname>.<subdomain>.<domain>.com セクションを Looker インスタンスの URL に置き換えてください。また、コードサンプルの <value> に適切な値を入力する場所を示すために、<value> という表記を使用しています。たとえば、次のコードで client_id=<value>&client_secret=<value> と表示されている部分で、最初の <value>client_id に、2 番目の <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 で示されているように)承認します。

Looker POST URL、クライアント シークレット、クライアント ID が入力された Postman の GUI。

Postman などのソフトウェア開発ツール(Paw など)を使用すると、UI 内で認可、本文、パラメータ、ヘッダーをすべて指定して、リクエストを生成できます。[送信] をクリックすると、エンドポイントも実行されます。

始めましょう(ただし、よく注意して)

SDK、HTTP リクエスト、ソフトウェア開発ツールを使用して Looker の API を使用できるようになりました。始めましょう、試してみてください。ただし、API を使用すると、ユーザーが退職した後のスケジュールの作成や再割り当てなどのプロセスを自動化できますが、API を不適切に使用するとインスタンスに損傷を与える可能性があります。

一般的な注意事項は次のとおりです。

  • 権限の編集やユーザーの削除(特に一括削除)を行う際は、十分に注意してください。管理者を含む多くのユーザーの削除やロックアウトが発生する可能性があり、このような操作は簡単に元に戻せません。
  • API 呼び出しによりインスタンス使用量が増加するため、最適なパフォーマンスを得るためにオフ時間でスケジュールするようにしてください。
  • 各インスタンス サーバーにはオープン ファイルの制限があるため、無関係な API の使用によってインスタンスがクラッシュする可能性があります。
  • 本番環境に追加する前に、ワークフローと関数を小規模でテストします。
  • API 認証情報は共有しないでください。また、他のユーザーがアクセスできるファイルに残さないでください。

ご質問がある場合や、優れたアイデアを共有したい場合は、Looker コミュニティをご覧ください。他に改善できる点や、ドキュメントに追加したいものがありましたら、お気軽にお知らせください。