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 की कार्रवाइयों की जांच करने के लिए फ़ायदेमंद है. इसके लिए, इन बातों का ध्यान रखना ज़रूरी है.
एसडीके और @auth(level: NO_ACCESS)
ऑपरेशन डायरेक्टिव को समझना
Admin SDK के पास खास अधिकार होते हैं. इसलिए, यह आपकी किसी भी क्वेरी और म्यूटेशन को लागू कर सकता है. भले ही, @auth
डायरेक्टिव का इस्तेमाल करके ऐक्सेस लेवल सेट किए गए हों. इसमें NO_ACCESS
लेवल भी शामिल है.
अगर क्लाइंट के कामों के साथ-साथ, एडमिन से जुड़ी क्वेरी और म्यूटेशन को .gql
सोर्स फ़ाइलों में व्यवस्थित किया जाता है, ताकि उन्हें एडमिन से जुड़ी स्क्रिप्ट में इंपोर्ट किया जा सके, तो Firebase का सुझाव है कि एडमिन से जुड़ी कार्रवाइयों को बिना किसी अनुमति के ऐक्सेस लेवल के तौर पर मार्क करें. इसके अलावा, उन्हें NO_ACCESS
के तौर पर सेट किया जा सकता है. इन दोनों ही तरीकों से, इस तरह के ऑपरेशन को क्लाइंट या अन्य गैर-ज़रूरी कॉन्टेक्स्ट से लागू होने से रोका जाता है.
Data Connect एम्युलेटर के साथ एसडीके टूल का इस्तेमाल करना
प्रोटोटाइप और टेस्ट एनवायरमेंट में, लोकल डेटा पर डेटा सीडिंग और अन्य ऑपरेशन करने में यह फ़ंक्शन मददगार हो सकता है. Admin SDK की मदद से, अपने वर्कफ़्लो को आसान बनाया जा सकता है. ऐसा इसलिए, क्योंकि यह लोकल फ़्लो के लिए पुष्टि और अनुमति को अनदेखा करता है.
Firebase Admin SDK टूल, Data Connect एनवायरमेंट वैरिएबल सेट होने पर, Data Connect एम्युलेटर से अपने-आप कनेक्ट हो जाता है:DATA_CONNECT_EMULATOR_HOST
export DATA_CONNECT_EMULATOR_HOST="127.0.0.1:9399"
ज़्यादा जानकारी के लिए, ये देखें:
- स्थानीय डेवलपमेंट में डेटा सीडिंग के लिए गाइड
- Data Connect एम्युलेटर के बारे में जानकारी देने वाला दस्तावेज़.
इस्तेमाल के सामान्य उदाहरण लागू करना
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
तरीकों से सार्वजनिक डेटा मैनेज करना
एसडीके का इस्तेमाल करके, सार्वजनिक तौर पर उपलब्ध डेटा के साथ काम किया जा सकता है. इसके लिए, आपको ऐसे उपयोगकर्ता के तौर पर काम करना होगा जिसकी पुष्टि नहीं हुई है.
// 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 स्टेटमेंट की लंबाई की सीमा पूरी हो जाएगी, तब आपको एक गड़बड़ी दिखेगी.
अपने वर्कलोड के लिए सही बैच साइज़ का पता लगाने के लिए, एक्सपेरिमेंट करें.
आगे क्या करना है?
- Admin SDK का इस्तेमाल करके, अपने डेटाबेस में डेटा जोड़ने के बारे में जानें
- Admin SDK के लिए एपीआई देखें.
- Firebase सीएलआई और Google Cloud कंसोल का इस्तेमाल, प्रोजेक्ट मैनेजमेंट से जुड़ी अन्य कार्रवाइयों के लिए करें. जैसे, स्कीमा और कनेक्टर मैनेज करना और सेवाएं और डेटाबेस मैनेज करना.