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 ソースファイルに整理する場合、Firebase では、管理オペレーションを認可アクセスレベルなしでマークするか、より明示的に 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" } } }

次のステップ