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 へのアクセス方法に関係なく、個人用 API 認証(クライアント ID とクライアント シークレットの形式)と Looker インスタンスが使用するポート番号の 2 つが必要になります。

クライアント 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 スタートガイドのドキュメント ページをご覧ください。次の例では、19999 の API ポートを使用していますが、インスタンスで使用されているポートを確認する必要があります。

オプション 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

curl を開始します。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 秒)です。

アクセス トークンを取得したら、自由に呼び出しを行うことができます。すべてのエンドポイントは、API バージョンごとに、Looker API 4.0 リファレンス ドキュメントにリストされています。また、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 コミュニティをご覧ください。他に改善できる点や、ドキュメントに追加したいものがありましたら、お気軽にお知らせください。