Firebase SQL Connect क्लाइंट एसडीके की मदद से, सर्वर-साइड की क्वेरी और म्यूटेशन को सीधे Firebase ऐप्लिकेशन से कॉल किया जा सकता है. स्कीमा, क्वेरी, और म्यूटेशन डिज़ाइन करते समय, कस्टम क्लाइंट एसडीके जनरेट किया जाता है. इन्हें SQL Connect सेवा में डिप्लॉय किया जाता है. इसके बाद, इस एसडीके टूल के तरीकों को अपने क्लाइंट लॉजिक में इंटिग्रेट करें.
जैसा कि हमने यहां बताया है, यह ध्यान रखना ज़रूरी है कि SQL Connect क्लाइंट कोड, क्वेरी और म्यूटेशन सबमिट नहीं करता है. इन्हें सर्वर पर लागू किया जाता है. इसके बजाय, डिप्लॉय किए जाने पर SQL Connect कार्रवाइयों को Cloud Functions जैसे सर्वर पर सेव किया जाता है. इसका मतलब है कि आपको क्लाइंट-साइड में ज़रूरी बदलाव करने होंगे, ताकि मौजूदा उपयोगकर्ताओं को कोई परेशानी न हो. उदाहरण के लिए, ऐप्लिकेशन के पुराने वर्शन पर.
इसलिए, SQL Connect आपको डेवलपर एनवायरमेंट और टूलिंग उपलब्ध कराता है. इससे सर्वर पर डिप्लॉय किए गए स्कीमा, क्वेरी, और म्यूटेशन का प्रोटोटाइप बनाया जा सकता है. यह प्रोटोटाइप बनाते समय, क्लाइंट-साइड एसडीके भी अपने-आप जनरेट करता है.
जब आपने अपनी सेवा और क्लाइंट ऐप्लिकेशन में अपडेट कर लिए हों, तब सर्वर और क्लाइंट, दोनों के अपडेट डिप्लॉय करने के लिए तैयार होते हैं.
क्लाइंट डेवलपमेंट का वर्कफ़्लो क्या है?
अगर आपने शुरू करें सेक्शन में दिए गए निर्देशों का पालन किया है, तो आपको SQL Connect के लिए डेवलपमेंट के पूरे फ़्लो के बारे में जानकारी मिल गई होगी. इस गाइड में, आपको अपने स्कीमा से Flutter SDK जनरेट करने के बारे में ज़्यादा जानकारी मिलेगी. साथ ही, क्लाइंट क्वेरी और म्यूटेशन के साथ काम करने के बारे में भी जानकारी मिलेगी.
संक्षेप में कहें, तो जनरेट किए गए Flutter SDK टूल को अपने क्लाइंट ऐप्लिकेशन में इस्तेमाल करने के लिए, आपको ये ज़रूरी चरण पूरे करने होंगे:
- अपने Flutter ऐप्लिकेशन में Firebase जोड़ें.
- flutterfire सीएलआई
dart pub global activate flutterfire_cliइंस्टॉल करें. flutterfire configureशुरू करें.
इसके बाद:
- अपने ऐप्लिकेशन का स्कीमा डेवलप करें.
एसडीके जनरेशन सेट अप करें:
- हमारे SQL Connect VS Code एक्सटेंशन में मौजूद ऐप्लिकेशन में SDK जोड़ें बटन की मदद से
- अपने
connector.yamlको अपडेट करके.
क्वेरी के लिए कॉल और म्यूटेशन लागू करें.
SQL Connect एम्युलेटर को सेट अप और इस्तेमाल करें और दोहराएं.
अपना Flutter SDK टूल जनरेट करना
अपने ऐप्लिकेशन में SQL Connect से जनरेट किए गए एसडीके सेट अप करने के लिए, Firebase सीएलआई का इस्तेमाल करें.
init कमांड को मौजूदा फ़ोल्डर में मौजूद सभी ऐप्लिकेशन का पता लगाना चाहिए. साथ ही, जनरेट किए गए SDK टूल अपने-आप इंस्टॉल होने चाहिए.
firebase init dataconnect:sdk
प्रोटोटाइपिंग के दौरान एसडीके अपडेट करना
अगर आपने SQL Connect VS Code एक्सटेंशन इंस्टॉल किया है, तो यह जनरेट किए गए एसडीके को हमेशा अप-टू-डेट रखेगा.
अगर SQL Connect VS Code एक्सटेंशन का इस्तेमाल नहीं किया जाता है, तो जनरेट किए गए SDK टूल को अप-टू-डेट रखने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.
firebase dataconnect:sdk:generate --watchबिल्ड पाइपलाइन में SDK जनरेट करना
सीआई/सीडी बिल्ड प्रोसेस में SQL Connect SDK टूल जनरेट करने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.
firebase dataconnect:sdk:generateक्लाइंट कोड सेट अप करना
SQL Connect ऐप्लिकेशन को शुरू करना
सबसे पहले, Firebase को सेटअप करने के स्टैंडर्ड निर्देशों का इस्तेमाल करके, अपने ऐप्लिकेशन को शुरू करें.
इसके बाद, SQL Connect प्लगिन इंस्टॉल करें:
flutter pub add firebase_data_connectSQL Connect Flutter SDK को शुरू करना
SQL Connect को सेट अप करने के लिए इस्तेमाल की गई जानकारी का इस्तेमाल करके, अपने SQL Connect इंस्टेंस को शुरू करें. यह जानकारी Firebase कंसोल के SQL Connect टैब में उपलब्ध है.
लाइब्रेरी इंपोर्ट करना
क्लाइंट कोड को शुरू करने के लिए, दो तरह के इंपोर्ट की ज़रूरत होती है. पहला, सामान्य SQL Connect इंपोर्ट और दूसरा, जनरेट किए गए खास एसडीके इंपोर्ट.
// 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();
एसडीके के क्वेरी वाले तरीकों को कॉल करना
यहां इन ऐक्शन शॉर्टकट फ़ंक्शन का इस्तेमाल करके एक उदाहरण दिया गया है:
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();
बदलावों की सूचना पाने के लिए सदस्यता लें
SQL Connect से रीयल-टाइम अपडेट पाने का तरीका देखें.
गिनती वाले फ़ील्ड में हुए बदलावों को हैंडल करना
किसी ऐप्लिकेशन के स्कीमा में गिनती की जानकारी शामिल हो सकती है. इसे आपकी GraphQL क्वेरी ऐक्सेस कर सकती हैं.
ऐप्लिकेशन के डिज़ाइन में बदलाव होने पर, इस्तेमाल की जा सकने वाली नई enum वैल्यू जोड़ी जा सकती हैं. उदाहरण के लिए,
मान लें कि ऐप्लिकेशन के लाइफ़साइकल में बाद में, आपने AspectRatio enum में FULLSCREEN वैल्यू जोड़ने का फ़ैसला किया.
SQL Connect वर्कफ़्लो में, लोकल डेवलपमेंट टूलिंग का इस्तेमाल करके अपनी क्वेरी और एसडीके अपडेट किए जा सकते हैं.
हालांकि, क्लाइंट के अपडेट किए गए वर्शन को रिलीज़ करने से पहले, हो सकता है कि पहले से डिप्लॉय किए गए क्लाइंट काम न करें.
रीसाइलेंट तरीके से लागू करने का उदाहरण
जनरेट किया गया एसडीके, ऐसी वैल्यू को हैंडल करने के लिए मजबूर करता है जिनकी पहचान नहीं हुई है. इसका मतलब है कि क्लाइंट कोड को 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}");
}
}
क्लाइंट-साइड कैश मेमोरी की सुविधा चालू करना
SQL Connect में क्लाइंट-साइड कैश मेमोरी की सुविधा होती है. इसे चालू करने के लिए, आपको connector.yaml फ़ाइल में बदलाव करना होगा. इस सुविधा के चालू होने पर, जनरेट किए गए क्लाइंट एसडीके, क्वेरी के जवाबों को स्थानीय तौर पर कैश मेमोरी में सेव करेंगे. इससे आपके ऐप्लिकेशन के डेटाबेस अनुरोधों की संख्या कम हो सकती है. साथ ही, नेटवर्क उपलब्ध न होने पर भी, आपके ऐप्लिकेशन के डेटाबेस पर निर्भर हिस्से काम कर सकते हैं.
क्लाइंट-साइड कैश मेमोरी की सुविधा चालू करने के लिए, अपने कनेक्टर कॉन्फ़िगरेशन में क्लाइंट कैश मेमोरी कॉन्फ़िगरेशन जोड़ें:
generate:
javascriptSdk:
outputDir: ../dart/
package: "dataconnect_generated"
clientCache:
maxAge: 5s
storage: memory
इस कॉन्फ़िगरेशन में दो पैरामीटर होते हैं. दोनों का इस्तेमाल करना ज़रूरी नहीं है:
maxAge: क्लाइंट एसडीके के नई वैल्यू फ़ेच करने से पहले, कैश मेमोरी में सेव किए गए जवाब की ज़्यादा से ज़्यादा उम्र. उदाहरण: "0", "30 सेकंड", "1 घंटा 30 मिनट".maxAgeकी डिफ़ॉल्ट वैल्यू0होती है. इसका मतलब है कि जवाबों को कैश मेमोरी में सेव किया जाता है. हालांकि, क्लाइंट SDK टूल हमेशा नई वैल्यू फ़ेच करेगा. कैश की गई वैल्यू का इस्तेमाल सिर्फ़ तब किया जाएगा, जबCACHE_ONLYकोexecute()के तौर पर सेट किया गया हो औरsubscribe()से शुरुआती नतीजा मिला हो.storage: क्लाइंट एसडीके को इस तरह कॉन्फ़िगर किया जा सकता है कि वह जवाबों कोpersistentस्टोरेज याmemoryमें कैश मेमोरी के तौर पर सेव करे.persistentके स्टोरेज में कैश किए गए नतीजे, ऐप्लिकेशन को रीस्टार्ट करने पर भी बने रहेंगे. Android या iOS को टारगेट करने पर, डिफ़ॉल्ट वैल्यूpersistentहोती है. वेब ब्राउज़र को टारगेट करते समय, सिर्फ़memoryस्टोरेज का इस्तेमाल किया जा सकता है.
कनेक्टर के कैश मेमोरी कॉन्फ़िगरेशन को अपडेट करने के बाद, अपने क्लाइंट एसडीके फिर से जनरेट करें और ऐप्लिकेशन को फिर से बनाएं. ऐसा करने के बाद, execute() और subscribe(), जवाबों को कैश मेमोरी में सेव करेंगे. साथ ही, कॉन्फ़िगर की गई नीति के मुताबिक कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल करेंगे. आम तौर पर, यह प्रोसेस अपने-आप होती है. इसके लिए, आपको कुछ नहीं करना होता. हालांकि, इन बातों का ध्यान रखें:
execute()का डिफ़ॉल्ट व्यवहार ऊपर बताया गया है: अगर किसी क्वेरी के नतीजे को कैश मेमोरी में सेव किया जाता है और कैश मेमोरी में सेव की गई वैल्यूmaxAgeसे पुरानी नहीं है, तो कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल करें. इस डिफ़ॉल्ट तरीके कोPREFER_CACHEनीति कहा जाता है.execute()के अलग-अलग इनवोकेशन के लिए, यह भी तय किया जा सकता है कि सिर्फ़ कैश मेमोरी में सेव की गई वैल्यू (CACHE_ONLY) दिखाई जाएं या सर्वर से नई वैल्यू (SERVER_ONLY) बिना किसी शर्त के फ़ेच की जाएं.await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);subscribe()को कॉल करने पर, अगर कैश मेमोरी में सेव किया गया कॉन्टेंट मौजूद है, तोmaxAgeकी सेटिंग के बावजूद, वह हमेशा तुरंत दिखेगा.execute()पर किए जाने वाले अगले कॉल में, सुनने वालों को कॉन्फ़िगर किए गएmaxAgeके हिसाब से सूचना दी जाएगी.
क्लाइंट साइड पर म्यूटेशन का इस्तेमाल करना
म्यूटेशन को क्वेरी की तरह ही ऐक्सेस किया जा सकता है.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
अपने Flutter ऐप्लिकेशन का प्रोटोटाइप बनाना और उनकी जांच करना
लोकल एम्युलेटर का इस्तेमाल करने के लिए क्लाइंट को इंस्ट्रूमेंट करना
SQL Connect एम्युलेटर का इस्तेमाल किया जा सकता है. इसे SQL 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 में डेटा टाइप
SQL Connect सर्वर, सामान्य GraphQL डेटा टाइप दिखाता है. इन्हें एसडीके में इस तरह दिखाया जाता है.
| SQL Connect टाइप | Dart |
|---|---|
| टाइमस्टैम्प | firebase_data_connect.Timestamp |
| Int (32-बिट) | int |
| तारीख | DateTime |
| यूयूआईडी | स्ट्रिंग |
| Int64 | int |
| फ़्लोट | डबल |
| बूलियन | बूलियन |
| कोई भी | firebase_data_connect.AnyValue |