डेटा कनेक्ट के साथ एडमिन SDK टूल का इस्तेमाल करना

Firebase Admin SDK, सर्वर लाइब्रेरी का एक सेट है. इसकी मदद से, ऐक्सेस लेवल वाले एनवायरमेंट से Firebase के साथ इंटरैक्ट किया जा सकता है. इससे, Firebase Data Connect सेवा पर क्वेरी करने और डेटा मैनेज करने के लिए, एक साथ कई बदलाव करने जैसे काम किए जा सकते हैं. साथ ही, ऐक्सेस लेवल और किसी दूसरे व्यक्ति के क्रेडेंशियल का इस्तेमाल करके अन्य काम भी किए जा सकते हैं.

Admin SDK, आपको रीड/राइट और रीड-ओनली, दोनों मोड में ऑपरेशन कॉल करने के लिए एपीआई उपलब्ध कराता है. सिर्फ़ पढ़ने की अनुमति वाले ऑपरेशन की मदद से, एडमिन के ऐसे फ़ंक्शन लागू किए जा सकते हैं जिनसे आपके डेटाबेस में मौजूद डेटा में बदलाव नहीं होता.

Admin SDK सेटअप करना

अपने सर्वर पर Firebase Data Connect का इस्तेमाल शुरू करने के लिए, आपको सबसे पहले Node.js के लिए Admin SDK को इंस्टॉल और सेट अप करना होगा.

अपनी स्क्रिप्ट में Admin SDK टूल को शुरू करना

SDK टूल को शुरू करने के लिए, Data Connect एक्सटेंशन इंपोर्ट करें और अपने प्रोजेक्ट के सेवा आईडी और जगह की जानकारी दें.


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:9399"

ज़्यादा जानकारी के लिए, ये देखें:

इस्तेमाल के सामान्य उदाहरण लागू करना

Admin SDK, आपके अहम डेटा पर खास सुविधाओं के साथ काम करने के लिए दिया जाता है.

एडमिन SDK टूल दो इंटरफ़ेस उपलब्ध कराता है:

  • रीड-राइट या रीड-ओनली मोड में काम करने वाले ज़्यादातर ऑपरेशन के लिए सामान्य इंटरफ़ेस. इसमें आपका कोड क्वेरी और म्यूटेशन लागू करता है और उन्हें रीड-राइट executeGraphql या रीड-ओनली executeGraphqlRead मोड में पास करता है.
  • बल्क डेटा ऑपरेशन के लिए खास इंटरफ़ेस, जो सामान्य executeGraphql तरीकों के बजाय, बदलाव करने वाले ऑपरेशन के लिए खास तरीके दिखाता है: insert, insertMany, upsert, और upsertMany.

executeGraphql तरीकों से उपयोगकर्ता का डेटा मैनेज करना

Admin SDK का इस्तेमाल, उपयोगकर्ता के डेटा को मैनेज करने के लिए किया जाता है.

एडमिन क्रेडेंशियल का इस्तेमाल करना

उपयोगकर्ता का डेटा ऐक्सेस करने का सबसे आसान तरीका, एडमिन क्रेडेंशियल का इस्तेमाल करना है.

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

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

export interface UserVariables {
  id: string;
}

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

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

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

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

उपयोगकर्ता के क्रेडेंशियल का गलत इस्तेमाल करना

ऐसे भी इस्तेमाल के उदाहरण हैं जहां आपको अपनी स्क्रिप्ट से, किसी खास उपयोगकर्ता की ओर से सीमित क्रेडेंशियल के आधार पर, उपयोगकर्ता के डेटा में बदलाव कराना है. यह तरीका, कम से कम अधिकारों के सिद्धांत का पालन करता है.

इस इंटरफ़ेस का इस्तेमाल करने के लिए, Authentication टोकन फ़ॉर्मैट का पालन करने वाले, पसंद के मुताबिक बनाए गए JWT ऑथराइज़ेशन टोकन से जानकारी इकट्ठा करें. कस्टम टोकन की गाइड भी देखें.

// Get the current user's data
const queryGetUserImpersonation = `
    query getUser @auth(level: USER) {
        user(key: {uid_expr: "auth.uid"}) {
            id,
            name
        }
    }`;

// Impersonate a user with the specified auth claims
const optionsAuthenticated: GraphqlOptions<undefined> = {
    impersonate: {
        authClaims: {
            sub: 'QVBJcy5ndXJ1'
        }
    }
};

// executeGraphql with impersonated authenticated user scope
const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetUserImpersonation, optionsAuthenticated);

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

executeGraphql तरीकों से सार्वजनिक डेटा मैनेज करना

SDK का इस्तेमाल करके, सार्वजनिक तौर पर ऐक्सेस किए जा सकने वाले डेटा के साथ काम किया जा सकता है. इसके लिए, ऐसे उपयोगकर्ता के नाम पर काम किया जा सकता है जिसकी पुष्टि नहीं की गई है.

// Query to get posts, with authentication level PUBLIC
const queryGetPostsImpersonation = `
    query getPosts @auth(level: PUBLIC) {
        posts {
          description
        }
    }`;

// Attempt to access data as an unauthenticated user
const optionsUnauthenticated: GraphqlOptions<undefined> = {
    impersonate: {
        unauthenticated: true
    }
};

// executeGraphql with impersonated unauthenticated user scope
const gqlResponse = await dataConnect.executeGraphql<UserData, undefined>(queryGetPostsImpersonation, optionsUnauthenticated);

एक साथ कई डेटा ऑपरेशन करना

Firebase का सुझाव है कि आप प्रोडक्शन डेटाबेस पर, एक साथ कई डेटा ऑपरेशन करने के लिए Admin SDK का इस्तेमाल करें.

एसडीके टूल, बल्क डेटा के साथ काम करने के लिए ये तरीके उपलब्ध कराता है. दिए गए आर्ग्युमेंट से, हर तरीका एक GraphQL म्यूटेशन बनाता है और उसे लागू करता है.


// Methods of the bulk operations API
// dc is a Data Connect admin instance from getDataConnect

const resp = await dc.insert("movie" /*table name*/, data[0]);
const resp = await dc.insertMany("movie" /*table name*/, data);
const resp = await dc.upsert("movie" /*table name*/, data[0]);
const resp = await dc.upsertMany("movie" /*table name*/, data);

एक साथ कई कार्रवाइयां करने पर परफ़ॉर्मेंस से जुड़ी जानकारी

बैकएंड के हर अनुरोध के लिए, Cloud SQL में एक राउंड ट्रिप होगा. इसलिए, जितने ज़्यादा अनुरोध एक साथ किए जाएंगे उतना ही ज़्यादा थ्रूपुट होगा.

हालांकि, बैच का साइज़ जितना बड़ा होगा, जनरेट किया गया SQL स्टेटमेंट उतना ही लंबा होगा. PostgreSQL SQL स्टेटमेंट की लंबाई की सीमा पूरी होने पर, आपको गड़बड़ी का मैसेज दिखेगा.

अपने वर्कफ़्लो के लिए, सही बैच साइज़ का पता लगाने के लिए प्रयोग करें.

आगे क्या करना है?