Data Connect で Admin SDK を使用する

Firebase Admin SDK は、特権環境から Firebase を操作するために使用するサーバー ライブラリのセットであり、一括データ管理や昇格した権限によるその他のオペレーションのために Firebase Data Connect サービスに対してクエリやミューテーションを実行するなどのアクションを行うことができます。

Admin SDK には、読み取り/書き込みモードと読み取り専用モードの両方でオペレーションを呼び出す API が用意されています。読み取り専用オペレーションを使用すると、データベース内のデータの変更が不可能な管理機能を実装できます。

Admin SDK の設定

サーバーで Firebase Data Connect を使用するには、まず Node.js 用に Admin SDK をインストールして設定する必要があります。

スクリプトで Admin SDK を初期化する

SDK を初期化するには、Data Connect 拡張機能をインポートし、プロジェクト サービス ID とロケーションを宣言します。


import { initializeApp } from 'firebase-admin/app';
import { getDataConnect } from 'firebase-admin/data-connect';

// If you'd like to use OAuth2 flows and other credentials to log in,
// visit https://firebase.google.com/docs/admin/setup#initialize-sdk
// for alternative ways to initialize the SDK.

const app = initializeApp();

const dataConnect = getDataConnect({
    serviceId: 'serviceId',
    location: 'us-west2'
});

Admin SDK で使用するクエリとミューテーションを設計する

Admin SDK は、次の考慮事項を考慮して、Data Connect オペレーションのテストに役立ちます。

SDK と @auth(level: NO_ACCESS) オペレーション ディレクティブについて

Admin SDK は権限で動作するため、@auth ディレクティブを使用して設定されたアクセスレベル(NO_ACCESS レベルを含む)に関係なく、任意のクエリとミューテーションを実行できます。

クライアント オペレーションとともに、管理スクリプトへのインポート用に管理クエリとミューテーションを .gql ソースファイルに整理する場合は、管理オペレーションに認可アクセスレベルを付けないか、明示的に NO_ACCESS として設定することをおすすめします。どちらの場合も、このようなオペレーションがクライアントから、または他の特権のないコンテキストで実行されるのを防ぐことができます。

Data Connect エミュレータで SDK を使用する

プロトタイプ環境とテスト環境では、ローカルデータに対してデータ シードなどのオペレーションを実行すると便利です。Admin SDK を使用すると、ローカルフローでの認証と承認を無視できるため、ワークフローを簡素化できます。

DATA_CONNECT_EMULATOR_HOST 環境変数が設定されている場合、Firebase Admin SDK は Data Connect エミュレータに自動的に接続します。

export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:8080"

詳しくは以下をご覧ください。

一般的なユースケースの実装

Admin SDK は、重要なデータに対する特権オペレーション用に用意されています。

Data Connect の API は、読み取り / 書き込み executeGraphql インターフェースと読み取り専用 executeGraphqlRead インターフェースで構成されています。

ユーザーデータを管理する

Admin SDK の一般的なユースケースは、ユーザーデータの管理です。

interface UserData {
  user: {
    id: string;
    name: string;
  };
}

export interface UserVariables {
  id: string;
}

const options:GraphqlOptions<UserVariables> = { variables: { id: "QVBJcy5ndXJ1" } };

// user can be publicly accessible, or restricted to admins
const query = "query getProfile(id: AuthID) { user(id: $id) { id name } }";

//executeGraphql
const gqlResponse = await dataConnect.executeGraphql<UserData, UserVariables>(query, options);

//executeGraphqlRead (similar to above but only for read operations)
const gqlResponse = await dataConnect.executeGraphqlRead<UserData, UserVariables>(query, options);

// gqlResponse -> { "data": { "user": { "id": "QVBJcy5ndXJ1", "name": "Fred" } } }

次のステップ