Firebase Data Connect क्लाइंट SDK टूल की मदद से, सर्वर-साइड क्वेरी और म्यूटेशन को सीधे Firebase ऐप्लिकेशन से कॉल किया जा सकता है. डेटा कनेक्ट सेवा में डिप्लॉय किए जाने वाले स्कीमा, क्वेरी, और म्यूटेशन डिज़ाइन करते समय, कस्टम क्लाइंट SDK टूल जनरेट किया जाता है. Data Connect इसके बाद, इस SDK टूल के तरीकों को अपनी क्लाइंट लॉजिक में इंटिग्रेट किया जाता है.
जैसा कि हमने कहीं और बताया है, यह ध्यान रखना ज़रूरी है कि Data Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते. साथ ही, इन्हें सर्वर पर एक्ज़ीक्यूट नहीं किया जाता. इसके बजाय, डिप्लॉय किए जाने पर, Data Connect ऑपरेशन को सर्वर पर Cloud Functions की तरह सेव किया जाता है. इसका मतलब है कि आपको मौजूदा उपयोगकर्ताओं के लिए, क्लाइंट-साइड में किए गए बदलावों को डिप्लॉय करना होगा. ऐसा न करने पर, मौजूदा उपयोगकर्ताओं के लिए ऐप्लिकेशन काम नहीं करेगा. उदाहरण के लिए, ऐप्लिकेशन के पुराने वर्शन पर.
इसलिए, Data Connect आपको डेवलपर एनवायरमेंट और टूलिंग उपलब्ध कराता है. इसकी मदद से, सर्वर पर डिप्लॉय किए गए स्कीमा, क्वेरी, और म्यूटेशन का प्रोटोटाइप बनाया जा सकता है. प्रोटोटाइप बनाते समय, यह क्लाइंट-साइड SDK टूल अपने-आप जनरेट करता है.
जब आपकी सेवा और क्लाइंट ऐप्लिकेशन में किए गए अपडेट को दोहराया जाता है, तब सर्वर और क्लाइंट-साइड, दोनों के अपडेट डिप्लॉय किए जा सकते हैं.
क्लाइंट डेवलपमेंट का वर्कफ़्लो क्या है?
अगर आपने शुरू करें लेख पढ़ा है, तो आपको के लिए, डेवलपमेंट के पूरे फ़्लो के बारे में जानकारी मिल गई होगी.Data Connect इस गाइड में, आपको अपने स्कीमा से Flutter SDK टूल जनरेट करने और क्लाइंट क्वेरी और म्यूटेशन के साथ काम करने के बारे में ज़्यादा जानकारी मिलेगी.
संक्षेप में, अपने क्लाइंट ऐप्लिकेशन में जनरेट किए गए Flutter SDK टूल का इस्तेमाल करने के लिए, आपको ये ज़रूरी शर्तें पूरी करनी होंगी:
- अपने Flutter ऐप्लिकेशन में Firebase जोड़ें.
- flutterfire CLI
dart pub global activate flutterfire_cliइंस्टॉल करें. flutterfire configureचलाएं.
इसके बाद:
- अपने ऐप्लिकेशन का स्कीमा डेवलप करें.
SDK टूल जनरेट करने की सुविधा सेट अप करें:
- हमारे Data Connect VS Code एक्सटेंशन में मौजूद, ऐप्लिकेशन में SDK टूल जोड़ें बटन की मदद से
- अपडेट करके
connector.yaml.
डेटा कनेक्ट Data Connect एम्युलेटर सेट अप करें और उसका इस्तेमाल करें. साथ ही, उसे दोहराएं.
अपना Flutter SDK टूल जनरेट करना
अपने ऐप्लिकेशन में, Data Connect से जनरेट किए गए SDK टूल सेट अप करने के लिए, Firebase का इस्तेमाल करें.
init कमांड को मौजूदा फ़ोल्डर में मौजूद सभी ऐप्लिकेशन का पता लगाना चाहिए. साथ ही, जनरेट किए गए SDK टूल को अपने-आप इंस्टॉल करना चाहिए.
firebase init dataconnect:sdk
प्रोटोटाइप बनाते समय SDK टूल अपडेट करना
अगर आपने Data Connect VS Code एक्सटेंशन इंस्टॉल किया है, तो यह जनरेट किए गए SDK टूल को हमेशा अप-टू-डेट रखेगा.
अगर Data Connect VS Code एक्सटेंशन का इस्तेमाल नहीं किया जाता है, तो जनरेट किए गए SDK टूल को अप-टू-डेट रखने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.
firebase dataconnect:sdk:generate --watchबिल्ड पाइपलाइन में SDK टूल जनरेट करना
CI/CD बिल्ड प्रोसेस में, Data Connect SDK टूल जनरेट करने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.
firebase dataconnect:sdk:generateक्लाइंट कोड सेट अप करना
अपना Data Connect ऐप्लिकेशन शुरू करना
सबसे पहले, Firebase के सेटअप के सामान्य निर्देशों का इस्तेमाल करके, अपना ऐप्लिकेशन शुरू करें.
इसके बाद, Data Connect प्लग-इन इंस्टॉल करें:
flutter pub add firebase_data_connectData Connect Flutter SDK टूल शुरू करना
Data Connect का इंस्टेंस शुरू करने के लिए, उस जानकारी का इस्तेमाल करें जिसका इस्तेमाल आपने Data Connect सेट अप करने के लिए किया था. यह जानकारी, Firebase कंसोल के Data Connect टैब में उपलब्ध है.
लाइब्रेरी इंपोर्ट करना
अपने क्लाइंट कोड को शुरू करने के लिए, इंपोर्ट के दो सेट की ज़रूरत होती है. पहला, सामान्य Data Connect इंपोर्ट और दूसरा, जनरेट किए गए SDK टूल के खास इंपोर्ट.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
क्लाइंट साइड पर क्वेरी का इस्तेमाल करना
जनरेट किए गए कोड में, पहले से तय किए गए क्वेरी रेफ़रंस मौजूद होंगे. आपको बस इन्हें इंपोर्ट करना होगा और इन पर execute को कॉल करना होगा.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
SDK टूल की क्वेरी के तरीके कॉल करना
यहां इन ऐक्शन शॉर्टकट फ़ंक्शन का इस्तेमाल करने का एक उदाहरण दिया गया है:
import 'generated/movies.dart';
function onBtnClick() {
// This will call the generated Dart from the CLI and then make an HTTP request to the server.
MoviesConnector.instance.listMovies().execute().then(data => showInUI(data)); // == MoviesConnector.instance.listMovies().ref().execute();
}
वैकल्पिक फ़ील्ड
कुछ क्वेरी में, वैकल्पिक फ़ील्ड हो सकते हैं. ऐसे मामलों में, Flutter SDK टूल एक बिल्डर तरीका दिखाता है. इसे अलग से सेट करना होगा.
उदाहरण के लिए, createMovie को कॉल करते समय, rating फ़ील्ड वैकल्पिक होता है. इसलिए, आपको इसे बिल्डर फ़ंक्शन में देना होगा.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi"}).rating(5).execute();
बदलावों की सदस्यता लेना
बदलावों की सदस्यता ली जा सकती है. इससे, क्वेरी को एक्ज़ीक्यूट करने पर, ऐप्लिकेशन में बदलाव अपने-आप अपडेट हो जाएंगे.
QueryRef<ListMoviesData, void> listRef = MoviesConnector.instance.listMovies().ref();
// subscribe will immediately invoke the query if no execute was called on it previously.
listRef.subscribe().listen((data) {
updateUIWithMovies(data.movies);
});
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
await listRef.execute(); // will update the subscription above`
गिनती वाले फ़ील्ड में किए गए बदलावों को मैनेज करना
किसी ऐप्लिकेशन के स्कीमा में गिनती वाले फ़ील्ड हो सकते हैं, जिन्हें आपकी GraphQL क्वेरी से ऐक्सेस किया जा सकता है.
ऐप्लिकेशन के डिज़ाइन में बदलाव होने पर, enum की नई वैल्यू जोड़ी जा सकती हैं. उदाहरण के लिए, मान लें कि ऐप्लिकेशन के लाइफ़साइकल में बाद में, आपने AspectRatio enum में FULLSCREEN वैल्यू जोड़ने का फ़ैसला किया.
Data Connect वर्कफ़्लो में, क्वेरी और SDK टूल अपडेट करने के लिए, लोकल डेवलपमेंट टूलिंग का इस्तेमाल किया जा सकता है.
हालांकि, क्लाइंट का अपडेट किया गया वर्शन रिलीज़ करने से पहले, डिप्लॉय किए गए पुराने क्लाइंट काम करना बंद कर सकते हैं.
लचीले तरीके से लागू करने का उदाहरण
जनरेट किया गया SDK टूल, ऐसी वैल्यू को मैनेज करने के लिए मजबूर करता है जिनकी जानकारी नहीं है. इसका मतलब है कि क्लाइंट कोड को EnumValue ऑब्जेक्ट को Known या Unknown में अनरैप करना होगा.
final result = await MoviesConnector.instance.listMovies().execute();
if (result.data != null && result.data!.isNotEmpty) {
handleEnumValue(result.data![0].aspectratio);
}
void handleEnumValue(EnumValue<AspectRatio> aspectValue) {
if (aspectValue.value != null) {
switch(aspectValue.value!) {
case AspectRatio.ACADEMY:
print("This movie is in Academy aspect");
break;
case AspectRatio.WIDESCREEN:
print("This movie is in Widescreen aspect");
break;
case AspectRatio.ANAMORPHIC:
print("This movie is in Anamorphic aspect");
break;
case AspectRatio.IMAX:
print("This movie is in IMAX aspect");
}
} else {
print("Unknown aspect ratio detected: ${aspectValue.stringValue}");
}
}
क्लाइंट साइड पर म्यूटेशन का इस्तेमाल करना
म्यूटेशन को क्वेरी की तरह ही ऐक्सेस किया जा सकता है.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
अपने Flutter ऐप्लिकेशन का प्रोटोटाइप बनाना और उन्हें टेस्ट करना
लोकल एम्युलेटर का इस्तेमाल करने के लिए, क्लाइंट को इंस्ट्रूमेंट करना
Data Connect एम्युलेटर का इस्तेमाल किया जा सकता है, चाहे वह डेटा कनेक्ट VS Code एक्सटेंशन से हो या सीएलआई से.
दोनों ही स्थितियों में, एम्युलेटर से कनेक्ट करने के लिए, ऐप्लिकेशन को इंस्ट्रूमेंट करने का तरीका एक ही है.
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'generated/movies.dart';
MoviesConnector.instance.dataConnect
.useDataConnectEmulator('127.0.0.1', 9399);
// Make calls from your app
QueryRef<ListMoviesData, void> ref = MoviesConnector.instance.listMovies.ref();
प्रोडक्शन रिसॉर्स पर स्विच करने के लिए, एम्युलेटर से कनेक्ट करने वाली लाइनों को टिप्पणी के तौर पर मार्क करें.
Dart SDK टूल में डेटा टाइप
Data Connect सर्वर, GraphQL के सामान्य डेटा टाइप दिखाता है. इन्हें SDK टूल में इस तरह दिखाया जाता है.
| Data Connect टाइप | Dart |
|---|---|
| टाइमस्टैम्प | firebase_data_connect.Timestamp |
| इंट (32-बिट) | int |
| तारीख | DateTime |
| यूयूआईडी | स्ट्रिंग |
| Int64 | int |
| फ़्लोट | डबल |
| बूलियन | बूलियन |
| कोई भी | firebase_data_connect.AnyValue |