Google APIを使用するためのnode.jsクライアントライブラリ。 OAUTH 2.0、APIキー、JWTトークンによる認可と認証のサポートが含まれています。
Google API
はじめる
インストール
クライアントライブラリを使用します
サンプル
APIリファレンス
認証と承認
OAUTH2クライアント
APIキーを使用します
アプリケーションデフォルトの資格情報
サービスアカウント資格情報
グローバルまたはサービスレベルの認証を設定します
使用法
リクエスト本文の指定
メディアアップロード
リクエストオプション
プロキシを使用します
サポートされているAPI
タイプスクリプト
HTTP/2
ライセンス
貢献
質問/問題?
サポートされているAPIの完全なリストは、Google APIエクスプローラーにあります。 APIエンドポイントは自動的に生成されるため、APIがリストにない場合、現在このAPIクライアントライブラリではサポートされていません。
DataStore、Cloud Storage、Pub/SubなどのGoogleクラウドプラットフォームAPIを利用する場合、 @Google-Cloudクライアントライブラリを活用することをお勧めします。これらのライブラリは、特定のGoogleクラウドプラットフォームサービス向けに設計された専用の慣用node.jsクライアントです。 @google-cloud/storage
など、個々のAPIパッケージをインストールすることをお勧めします。 GoogleクラウドプラットフォームAPI固有のパッケージの包括的なリストを調べるには、https://cloud.google.com/nodejs/docs/referenceを参照してください。
これらのクライアントライブラリは、Googleによって正式にサポートされています。ただし、これらのライブラリは完全であると見なされ、メンテナンスモードです。これは、重要なバグやセキュリティの問題に対処することを意味しますが、新しい機能は追加されません。 Google Cloud Platform APIの場合、アクティブな開発中のGoogle-Cloud-Nodeを使用することをお勧めします。
このライブラリは、Node.jsのメンテナンスLT、アクティブLT、および現在のリリースをサポートしています。 詳細については、node.jsリリーススケジュールを参照してください。
このライブラリはnpm
に配布されます。依存関係として追加するには、次のコマンドを実行します。
$ npmは、googleapisをインストールします
スタートアップ時間を短縮する必要がある場合は、サブモジュールを独自の依存関係としてインストールすることもできます。このリストにないサブモジュールを公開する努力をしています。依存関係として追加するには、次のサンプルコマンドを実行し、優先APIに置き換えます。
$ npmインストール @googleapis/docs
この検索をnpm
で実行して、利用可能なサブモジュールのリストを見つけることができます。
これは非常に簡単な例です。これにより、ブロガーのクライアントが作成され、ブログIDが与えられたブログの詳細を取得します。
const {google} = require( 'googleapis'); //各APIは複数のバージョンをサポートする場合があります。このサンプルを使用すると、Blogger APIの// V3を取得し、APIキーを使用してAuthenticate.const Blogger = Google.Blogger({{ バージョン: 'V3'、 auth: 'your api key'}); const params = { blogid: '3213900'}; //ブログdetailblogger.blogs.getを取得します(params、(err、res)=> { if(err){console.error(err); shrow err; } console.log( `ブログurlは$ {res.data.url}`);});
コールバックを使用する代わりに、約束も使用できます!
blogger.blogs.get(params) .then(res => {console.log( `ブログurlは$ {res.data.url}`); }) .catch(error => {console.error(error); });
またはasync/await:
async関数runsample(){ const res = await blogger.blogs.get(params); console.log( `ブログurlは$ {res.data.url}`);} runsample()。catch(console.error);
または、サブモジュールをインストールすることにより、APIに直接通話することもできます。
const docs = require( '@googleapis/docs')const auth = new docs.auth.googleauth({{ keyfileName: 'path_to_service_account_key.json'、//スコープは、配列または単一のスペース削除文字列として指定できます。 スコープ:['https://www.googleapis.com/auth/documents'> }); const authclient = auth.getclient(); const client = await docs.docs({version:' v1 '、auth:authclient:authclient }); const createresponse = await client.documents.create({requestbody:{your new document! '、}、}); console.log(createresponse.data);
サンプルがたくさんありますか? APIの使用方法を見つけようとしている場合は...最初にそこを見てください!欠落が必要なサンプルがある場合は、お気軽に問題を提出してください。
このライブラリには、API参照ドキュメントの完全なセットがあります。このドキュメントは自動生成されており、場所が変更される場合があります。
Google APIに認証する方法は複数あります。一部のサービスはすべての認証方法をサポートしていますが、他のサービスは1つまたは2つしかサポートできません。
OAUTH2-これにより、特定のユーザーに代わってAPI呼び出しを行うことができます。 このモデルでは、ユーザーはアプリケーションにアクセスし、Googleアカウントにサインインし、アプリケーションに一連のスコープに対する承認を提供します。 もっと詳しく知る。
APIキー- APIキーを使用すると、クライアントまたはサーバーからサービスにアクセスできます。 通常、安全性が低く、これは限られたスコープを持つサービスの小さなサブセットでのみ使用できます。 もっと詳しく知る。
アプリケーションのデフォルトの資格情報-Google Cloud SDKを使用してGoogle Cloud SDKを使用してGoogle APIへの自動アクセスを提供するか、Google Cloudプラットフォームに展開されたアプリケーション用のGCEメタデータサーバーを提供します。もっと詳しく知る。
サービスアカウント資格- このモデルでは、アプリケーションはサービスアカウントを使用してGoogle APIに直接話し合います。バックエンドからGoogle APIに直接通信するバックエンドアプリケーションがある場合に役立ちます。もっと詳しく知る。
認証クライアントの詳細については、Google Auth Libraryを参照してください。
このモジュールには、アクセストークンを取得し、更新し、リクエストをシームレスに再試行できるOAUTH2クライアントが付属しています。 GoogleのOAUTH2実装の基本は、Googleの認証と認証のドキュメントで説明されています。
次の例では、 CLIENT_ID
、 CLIENT_SECRET
、 REDIRECT_URL
必要になる場合があります。これらの情報は、開発者コンソールに移動して、プロジェクト - > APIS&AUTH->資格情報をクリックすることで見つけることができます。
クラウドコンソールに移動し、新しいOAUTH2クライアントIDを作成します
アプリケーションタイプのWeb Application
選択します
値http://localhost:3000/oauth2callback
(またはシナリオに該当する値)を使用して、承認されたリダイレクトURIを追加する
Create
クリックして、次の画面でOk
新しく作成したOAUTH2クライアントIDの横にあるDownload
アイコンをクリックします
このファイルを安全な場所に保存し、このファイルをソースコントロールに確認しないでください!
OAUTH2の詳細とその仕組みについては、こちらをご覧ください。
OAUTH2クライアントで承認および認証する完全なサンプルアプリケーションはsamples/oauth2.js
で利用できます。
アクセストークンを取得するためにユーザーから許可を求めるには、同意ページにリダイレクトします。同意ページURLを作成するには:
const {google} = require( 'googleapis'); const oauth2client = new google.auth.oauth2( your_client_id、 your_client_secret、 your_redirect_url); //ブロガーとGoogleカレンダーのスコープスコープの許可を要求するURLを生成します= [[ 'https://www.googleapis.com/auth/blogger'、 'https://www.googleapis.com/auth/calendar'] const url = oauth2client.generateauthurl({{ //「オンライン」(デフォルト)または「オフライン」(refresh_tokenを取得) Access_Type:「オフライン」、 // 1つのスコープのみが必要な場合は、文字列として渡すことができます スコープ:スコープ});
重要なメモrefresh_token
は、最初の承認でのみ返されます。詳細はこちらです。
ユーザーが同意ページで権限を指定すると、Googleはページをリダイレクトし、コードクエリパラメーターを提供したRedirect URLにリダイレクトします。
GET /oauthcallback?code={authorizationCode}
コードが返されたら、以下に示すようにアクセストークンを要求できます。
//これは、アクセス_Tokenとrefresh_tokenのオブジェクトを提供します。//これらをどこかに安全に保存して、後で使用できるようにします。
OAUTH2クライアントに資格情報が設定されていると、準備ができています!
アクセストークンは期限切れになります。このライブラリは、更新トークンを自動的に使用して、期限切れになっている場合は新しいアクセストークンを取得します。最新のトークンを常に保存する簡単な方法は、 tokens
イベントを使用することです。
oauth2client.on( 'tokens'、(tokens)=> { if(tokens.refresh_token){// refresh_tokenをデータベースに保存!console.log(tokens.refresh_token); } console.log(tokens.access_token);});
このトークンイベントは、最初の承認でのみ発生し、 generateAuthUrl
メソッドを呼び出して更新トークンを受信するときに、 access_type
offline
に設定する必要があります。リフレッシュトークンを受信するための適切な制約を設定せずに必要な許可をアプリに既に提供している場合は、アプリケーションを再承認して、新鮮な更新トークンを受信する必要があります。ここで、アプリのアカウントへのアクセスを取り消すことができます。
refresh_token
後で設定するには、 setCredentials
メソッドを使用できます。
oauth2client.setcredentials({ REFRESH_TOKEN: `stored_refresh_token`});
クライアントに更新トークンがあると、APIへの次の呼び出しでアクセストークンが取得され、自動的に更新されます。
リフレッシュトークンは、付与された後、作業が停止する可能性があります。
ユーザーはアプリのアクセスを取り消しました
更新トークンは6か月間使用されていません
ユーザーはパスワードを変更し、更新トークンにはGmailスコープが含まれています
ユーザーアカウントは最大数のライブリフレッシュトークンを超えています
アプリケーションには「テスト」のステータスがあり、同意画面は外部ユーザータイプ用に構成されているため、7日間でトークンが失効します
開発者として、リフレッシュトークンが機能しなくなったケースを処理するために、コードを作成する必要があります。
あなたが行う予定のリクエストでAPIキーを送信する必要があるかもしれません。以下は、APIキーを使用してBlogger APIサービスにリクエストを行い、ブログの名前であるURLとその投稿の合計量を取得します。
const {google} = require( 'googleapis'); const blogger = google.blogger_v3({{ バージョン: 'V3'、 auth: 'your_api_key' //ここでAPIキーを指定}); const params = { blogid: '3213900'}; async function main(params){ const res = await blogger.blogs.get({blogid:params.blogid}); console.log( `$ {res.data.name} has $ {res.data.posts.totalitems}投稿!ブログurlは$ {res.data.url}`)}; main()。エラー);
APIキーの詳細については、ドキュメントをご覧ください。
OUTH2クライアント、JWTクライアント、またはComputeクライアントを手動で作成するのではなく、Auth Libraryは、コードが実行されている環境に応じて、正しい資格情報タイプを作成できます。
たとえば、Codeがローカル開発マシンで実行されているときにJWT Authクライアントが作成され、Google Compute Engineの構成されたインスタンスで同じコードが実行されているときにComputeクライアントが作成されます。以下のコードは、ランタイム環境に応じて、デフォルトの資格情報タイプを取得する方法を示しています。
Google Cloud SDKでアプリケーションのデフォルト資格情報をローカルに使用するには、実行してください。
$ GCLOUD AUTH Application-Defaultログイン
GCPで実行するとき、Service AuthorizeはGCEメタデータサーバーを介して自動的に提供されます。
const {google} = require( 'googleapis'); const compute = google.compute( 'v1'); async function main(){ const auth = new Google.auth.googleauth({//スコープは、配列または単一のスペース削除文字列として指定できます。 }); const authclient = auth.getClient(); //現在のプロジェクトIDを取得します const project = auth.getProjectid(); //プロジェクト内のGCEゾーンのリストを取得します。 const res = await compute.zones.list({project、auth:authclient}); console.log(res.data);} main()。catch(console.error);
サービスアカウントを使用すると、ロボットアカウントを使用してサーバーからサーバー、アプリレベルの認証を実行できます。サービスアカウントを作成し、キーファイルをダウンロードし、それを使用してGoogle APIに認証します。サービスアカウントを作成するには:
[サービスアカウント]キーページの作成に移動します
ドロップダウンでNew Service Account
選択します
Create
ボタンをクリックします
Serviceアカウント資格情報ファイルをどこかに安全に保存し、このファイルをソースコントロールに確認しないでください! サービスアカウント資格情報ファイルを参照するには、いくつかのオプションがあります。
GOOGLE_APPLICATION_CREDENTIALS
env var GOOGLE_APPLICATION_CREDENTIALS
という名前の環境変数でプロセスを開始できます。このenv varの値は、サービスアカウント資格情報へのフルパスである必要があります。
$ google_application_credentials =
keyFile
プロパティを使用しますまたは、 GoogleAuth
コンストラクターのkeyFile
プロパティを介して、サービスアカウント資格情報ファイルへのパスを指定することもできます。
const {google} = require( 'googleapis'); const auth = new google.auth.googleauth({{ keyfile: '/path/to/your-secret-key.json'、 スコープ:['https://www.googleapis.com/auth/cloud-platform']、});
auth
グローバルまたはサービスレベルのオプションとして設定できるため、すべてのリクエストを指定する必要はありません。たとえば、 auth
グローバルオプションとして設定できます。
const {google} = require( 'googleapis'); const oauth2client = new google.auth.oauth2( your_client_id、 your_client_secret、 your_redirect_url); // authをグローバルdefaultgoogle.options({{ AUTH:oauth2client});
オプションをグローバルに設定する代わりに、認証クライアントをサービスレベルに設定することもできます。
const {google} = require( 'googleapis'); const oauth2client = new google.auth.oauth2( your_client_id、 your_client_secret、 your_redirect_url); const drive = google.drive({{ バージョン: 'V2'、 AUTH:oauth2client});
詳細については、オプションセクションを参照してください。
リクエストの本文は、リクエストのrequestBody
パラメーターオブジェクトで指定されています。本体は、キー/値のペアを持つJavaScriptオブジェクトとして指定されています。たとえば、このサンプルは、メールがGmailアカウントに送信されたときにGoogle Cloud Pub/サブトピックに通知を投稿するウォッチャーを作成します。
const res = await gmail.users.watch({ userid: 'me'、 requestbody:{// `projects/$ {project_id}/topics/$ {topic_name}`トピック名に置き換えます: `Projects/el-gato/topics/gmail` }}); console.log(res.data);
このクライアントは、マルチパートメディアのアップロードをサポートしています。リソースパラメーターはrequestBody
パラメーターオブジェクトで指定され、メディア自体はmedia.body
パラメーターで指定されています。MimeTypeがmedia.mimeType
で指定されています。
この例では、タイトル「テスト」とコンテンツ「Hello World」を使用して、Googleドライブにプレーンテキストファイルをアップロードします。
const drive = google.drive({ バージョン: 'V3'、 auth:oauth2client}); const res = await drive.files.create({{ リクエストボディ:{name: 'test'、mimetype: 'text/plain' }、 メディア:{MimeType: 'Text/Plain'、body: 'hello world' }});
media.body
読み取り可能なストリームとして指定することで、メディアをアップロードすることもできます。これにより、メモリに収まらない非常に大きなファイルをアップロードできます。
const fs = require( 'fs'); const drive = google.drive({{ バージョン: 'V3'、 auth:oauth2client}); async function main(){ const res = await drive.files.create({requestbody:{name: 'testimage.png'、mimetype: 'image/png'}、media:{mimetype: 'image/png'、body:fs.createrStream( 'asaver .png ')} }); console.log(res.data);} main()。catch(console.error);
メディアの添付ファイルを使用した作成と変更リクエストの詳細については、 samples/drive/upload.js
サンプルをご覧ください。
API呼び出しの作成方法をより詳細に制御するために、このライブラリで使用される「Gaxios」オブジェクトに直接適用できる追加のオプションを指定してAPIにネットワーク呼び出しを行う機能を提供します。
グローバルgoogle
オブジェクトまたはサービスクライアントベースで追加のオプションを指定できます。指定したオプションはgaxios
オブジェクトに添付されているため、 gaxios
サポートするものが何であれ、このライブラリはサポートしています。また、作成したすべてのAPI呼び出しに添付されるグローバルまたはサービスごとのリクエストパラメーターを指定することもできます。
サポートされているオプションの完全なリストはこちらにあります。
各リクエストで送信されるデフォルトオプションを選択できます。これらのオプションは、Googleクライアントがインスタンス化されたすべてのサービスに使用されます。この例では、 GaxiosOptions
のtimeout
プロパティは、すべてのリクエストに対して設定されます。
const {google} = require( 'googleapis'); google.options({{ //このオブジェクトで作成されたすべてのリクエストは、オーバーライドされていない限り、これらの設定を使用します。 タイムアウト:1000、 auth:auth});
各リクエストで送信されたパラメーターを変更することもできます。
const {google} = require( 'googleapis'); google.options({{ //すべてのサービスからのすべての要求には、上記のクエリパラメーターが含まれます //サービスクライアントまたは個々のAPI呼び出しのいずれかでオーバーライドされない限り。 パラメーション:{quotauser: '[email protected]' }});
サービスクライアントを作成するときにオプションを指定することもできます。
const blogger = google.blogger({ バージョン: 'V3'、 //このオブジェクトで作成されたすべての要求は、指定されたAUTHを使用します。 auth: 'api key';});
これを行うことにより、このサービスクライアントで作成されたすべてのAPI呼び出しは、 'API KEY'
使用して認証されます。
注:作成されたクライアントは不可能なので、さまざまなオプションを指定する場合は、新しいクライアントを作成する必要があります。
上記の例と同様に、特定のサービスのすべての呼び出しに使用されるパラメーターを変更することもできます。
const blogger = google.blogger({ バージョン: 'V3'、 //このサービスクライアントで行われたすべてのリクエストには //個々のAPI呼び出しでオーバーライドされていない限り、BlogIDクエリパラメーター。 パラメージ:{blogid: '3213900' }}); //このドライブでの呼び出しは、blogid query parameter.const drive = google.drive( 'v3'); ...
リクエストごとに使用するauth
オブジェクトを指定できます。各要求は、サービスレベルとグローバルレベルで指定されたオプションも継承します。
例えば:
const {google} = require( 'googleapis'); const bigquery = google.bigquery( 'v2'); async function main(){ //この方法は、gcloud_projectとgoogle_application_credentialsを探します //環境変数。 const auth = new google.auth.googleauth({scopes:['https://www.googleapis.com/auth/cloud-platform'] }); const authclient = auth.getClient(); const projectid = auth.getProjectid(); const request = {projectId、dataSetid: '<your_dataset_id>'、//これは「リクエストレベル」optionauth:authclientです }; const res = await bigquery.datasets.delete(request); console.log(res.data);} main()。catch(console.error);
また、 url
、 method
、 responseType
など、リクエストごとにGaxiosオプションをオーバーライドすることもできます。
例えば:
const res = await drive.files.export({{ fileID: 'asxkjod9s79'、// Google Doc MIMETYPE: 'Application/PDF'}、{ //バイナリデータが取得されることを確認してください ResponseType: 'Stream'});
次の環境変数を使用して、HTTPおよびHTTPSリクエストをプロキシできます。
HTTP_PROXY
/ http_proxy
HTTPS_PROXY
/ https_proxy
http_proxy / http_proxyが設定されると、それらは明示的なプロキシ構成オプションが存在しない非SSLリクエストをプロキシに使用します。同様に、https_proxy / https_proxyは、明示的なプロキシ構成オプションを持たないSSL要求について尊重されます。環境変数の1つでプロキシを定義することは有効ですが、プロキシ構成オプションを使用して、特定の要求のためにそれをオーバーライドします。
サポートされているAPIのリストと、利用可能なすべてのバージョンのリストをプログラムで取得できます。
const {google} = require( 'googleapis'); const apis = google.getsupportedapis();
これにより、API名がオブジェクトプロパティ名としてオブジェクト、オブジェクト値としてバージョン文字列の配列が返されます。
このライブラリはTypeScriptで記述されており、箱から出してタイプを提供します。各APIに対して生成されたすべてのクラスとインターフェイスは、 ${apiName}_${version}
namespaceでエクスポートされます。たとえば、ドライブV3 APIタイプはすべて、 drive_v3
ネームスペースから利用できます。
輸入 { Google、//サービスへのアクセスに使用されるトップレベルのオブジェクト drive_v3、//すべてのサービスクライアントについて、エクスポートされた名前空間があります AUTH、// AUTH関連タイプの名前空間 一般、//「googleapis」からライブラリ全体で使用される一般的なタイプ; //注:「auth.googleauth」のような明示的なタイプの使用//デモンストレーション目的でのみここにあります。 通常、タイプスクリプトを使用すると、これらのタイプは//推測されます。constauth:auth.googleauth = new google.auth.googleauth(); const drive:drive_v3.drive = google.drive({{{ バージョン: 'V3'、 auth、}); //リクエストパラメーターのすべてのセットに生成されたタイプがありますlistparams:drive_v3.params $ resource $ files $ list = {}; const res = await drive.files.list(listparams); //生成されます応答フィールドのタイプおよびlistresults:drive_v3.schema $ filelist = res.data;
このライブラリには、http/2がサポートされています。それを有効にするには、 http2
オプションを使用する場所で、リクエストパラメーターが受け入れられます。
const {google} = require( 'googleapis'); google.options({{ http2:true、});
HTTP/2は、単一のソケットで複数の同時リクエストをマルチプレックスすることができるため、多くの場合パフォーマンスが高くなります。従来のHTTP/2 APIでは、クライアントは、リクエストを行うために行われたセッションを開閉することに直接責任を負います。 既存のAPIとの互換性を維持するために、このモジュールは既存のセッションを自動的に再利用します。これは、500msのアイドリング後に収集されます。 パフォーマンスの向上の多くは、バッチスタイルのワークロードとタイトなループで表示されます。
リリースノートに、壊れた変更と新機能の詳細なリストを見つけることができます。 25.x
前にこのライブラリを使用した場合は、リリースノートを参照して、コードの24.xx
から25.xx
に移行することについて学びます。とても簡単です:)
このライブラリは、Apache 2.0の下でライセンスされています。完全なライセンステキストはライセンスで利用できます。
貢献が大好きです!プルリクエストを送信する前に、最初に新しい問題を開始することは常に良いことです。詳細については、貢献を参照してください。
StackoverFlowに関する開発関連の質問をしてください。
バグ/問題が見つかった場合は、githubに提出してください。