本記事ではcurlを使用してGoogle BigQueryのAPIへのアクセスする方法を紹介します。Webクライアントを実装する前にアクセストークンの取得からAPIアクセスまで一連のフローをテストしたいときなどに参考にしてください。
BigQuery APIの有効化
GCPのコンソールにアクセスします。「APIとサービス」の「ライブラリ」を選択し、APIライブラリ一覧画面を開きます。
「BigQuery」で検索するとBigQuery APIが表示されますのでこれをクリックします。
BigQuery APIの内容を確認し「有効にする」をクリックします。
Google Cloud Platformでの認証情報の設定
GCPのコンソールにアクセスします。「APIとサービス」の「認証情報」を選択し、認証情報画面を開きます。
同意画面の構成
同意画面が構成されていない場合、以下の手順で同意画面を構成します。
「同意画面を構成」をクリックしOAuth同意画面設定画面を開きます。
「外部」が選択されていることを確認し「作成」をクリックします。
アプリケーション名に適当な名称を入力し、画面下の「保存」をクリックします。
認証情報の作成
画面上の「認証情報を作成」を展開し「OAuthクライアントID」をクリックします。
「アプリケーションの種類」から「ウェブアプリケーション」を選択、「名前」に適当なアプリケーション名を入力し、「承認済みリダイレクトURI」に適当なローカルのアドレスを入力します。最後に「作成」をクリックします。
作成が完了するとクライアントIDとクライアントシークレットが生成され画面に表示されるので、それぞれテキストエディタなどにメモしておきます。
これで認証情報が作成されました。作成した認証情報をクリックするとクライアントIDとクライアントシークレットを確認できます。
認証フローの実行
認可コードの取得
ブラウザで以下のURLにアクセスします。<クライアントID>には認証情報の作成時に取得したクライアントID、<リダイレクトURI>には同じく認証情報の作成時に設定したリダイレクトURIを設定してください。
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbigquery&<クライアントID>&response_type=code&redirect_uri=<リダイレクトURI>
上記URLにアクセスするとGoogleアカウントのログイン画面が表示されますのでBigQueryにアクセスするアカウントでログインしてください。ログインが完了すると下図のようなアプリケーションの認証画面に遷移します。アプリケーション名等を確認し「Allow」をクリックしてください。
認証が完了するとブラウザのURLに認可コードが表示されますのでこれをメモしておきます。
OAuthアクセストークンの取得
curlでOAuthアクセストークンを取得します。<認可コード>には前節で取得した認可コード、<クライアントID>、<クライアントシークレット>には認証情報の作成時に取得したクライアントIDとクライアントシークレット、<リダイレクトURI>には認証情報の作成時に設定したリダイレクトURIを設定してください。
curl -X POST -d code=<認可コード> -d client_id=<クライアントID> -d client_secret=<クライアントシークレット> -d redirect_uri=<リダイレクトURI> -d grant_type=authorization_code https://accounts.google.com/o/oauth2/token
上記コマンドを実行しOAuthアクセストークンのリクエストに成功するとアクセストークンが返ってきます。
>curl -X POST -d code=4/zgE5ZQ0xcOuDM6I207Gv4R_TiKHD-8XjSsVFKry99AkU5uoe8hIiagCoDdAPzO3t7HOsTITWUXrp9XIdcyuduko -d client_id=503930144471-9cuc9vldcq9v0cj546p44lfhhf9vk1rg.apps.googleusercontent.com -d client_secret=X-Ew1NEVWEeIAB8qMDX7lZ_T -d redirect_uri=http://localhost:33333 -d grant_type=authorization_code https://accounts.google.com/o/oauth2/token
{
"access_token": "ya29.a0AfH6SMBYIJFoAH15uHXbxFAPbMoS0ZWCxkh3EvaCp9nrERah2QWJuqs_RAXW5t-TbpATyIsA275ZzO7e-921_iWrMOAdsHEnIHI8uANNEfr0Dy8YNgRMUuWi53_k1v5shYKq_8oYBknSa4BdvwlUOik1U5OUUlqlYTk",
"expires_in": 3599,
"scope": "https://www.googleapis.com/auth/bigquery",
"token_type": "Bearer"
}
APIへのアクセス
それでは取得したアクセストークンを使ってAPIにアクセスしてみます。今回はテスト用に以下のようなデータを作成しました。データセット「ProductionManagement」の中に「Products」というテーブルがあります。このテーブルは3つのフィールドを持っています。
BigQueryのREST APIは以下のリファレンスを参考にしてください。
はじめに指定したテーブルの情報を取得するAPIにアクセスします。上記リファレンスの「RESTリファレンス」を展開し、「tables」の「get」の項目を表示します。
この「HTTP Request」のURLがテーブル情報のエンドポイントになります。APIへアクセスするにはリクエストヘッダに"Authorization: Bearer <アクセストークン>"を設定する必要があります。curlでアクセスする際には-Hオプションを指定してヘッダを設定してください。<アクセストークン>には先ほど取得したアクセストークンを設定します。
curl -X GET -H "Authorization: Bearer <アクセストークン>" https://bigquery.googleapis.com/bigquery/v2/projects/<プロジェクトID>/datasets/<データセットID>/tables/<テーブルID>
実際にこのAPIにアクセスした結果を示します。先ほど生成したアクセストークンを利用し、指定したテーブルの情報が取得できました。
>curl -X GET -H "Authorization: Bearer ya29.a0AfH6SMBYIJFoAH15uHXbxFAPbMoS0ZWCxkh3EvaCp9nrERah2QWJuqs_RAXW5t-TbpATyIsA275ZzO7e-921_iWrMOAdsHEnIHI8uANNEfr0Dy8YNgRMUuWi53_k1v5shYKq_8oYBknSa4BdvwlUOik1U5OUUlqlYTk" https://bigquery.googleapis.com/bigquery/v2/projects/spherical-booth-277000/datasets/ProductionManagement/tables/Products
{
"kind": "bigquery#table",
"etag": "7OOdMulNhhIN6uD4pOspew==",
"id": "spherical-booth-277000:ProductionManagement.Products",
"selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/spherical-booth-277000/datasets/ProductionManagement/tables/Products",
"tableReference": {
"projectId": "spherical-booth-277000",
"datasetId": "ProductionManagement",
"tableId": "Products"
},
"schema": {
"fields": [
{
"name": "Code",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "Name",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "Category",
"type": "STRING",
"mode": "NULLABLE"
}
]
},
"numBytes": "0",
"numLongTermBytes": "0",
"numRows": "0",
"creationTime": "1589248578107",
"expirationTime": "1594432578107",
"lastModifiedTime": "1589248578248",
"type": "TABLE",
"location": "US"
}
おわりに
curlを使ってBigQueryのAPIにアクセスする方法を紹介しました。ここで紹介した方法は他のGoogle Cloud PlatformのAPIにも適用できますので参考にしてください。