जनरेट किए गए Flutter SDK टूल का इस्तेमाल करना

Firebase SQL Connect क्लाइंट SDK टूल की मदद से, सर्वर-साइड क्वेरी और म्यूटेशन को सीधे Firebase ऐप्लिकेशन से कॉल किया जा सकता है. SQL Connect सेवा में डिप्लॉय किए जाने वाले स्कीमा, क्वेरी, और म्यूटेशन को डिज़ाइन करते समय, एक कस्टम क्लाइंट SDK टूल जनरेट किया जाता है. इसके बाद, इस एसडीके के तरीकों को अपने क्लाइंट लॉजिक में इंटिग्रेट करें.

जैसा कि हमने पहले भी बताया है, यह ध्यान रखना ज़रूरी है कि SQL Connect क्वेरी और म्यूटेशन, क्लाइंट कोड से सबमिट नहीं किए जाते और सर्वर पर एक्ज़ीक्यूट नहीं किए जाते. इसके बजाय, डिप्लॉय किए जाने पर, SQL Connect कार्रवाइयां Cloud Functions जैसे सर्वर पर सेव की जाती हैं. इसका मतलब है कि आपको क्लाइंट-साइड पर ज़रूरी बदलाव करने होंगे, ताकि मौजूदा उपयोगकर्ताओं को कोई समस्या न हो. उदाहरण के लिए, ऐप्लिकेशन के पुराने वर्शन पर.

इसलिए, SQL Connect आपको एक डेवलपमेंट एनवायरमेंट और टूल उपलब्ध कराता है. इससे आपको सर्वर पर डिप्लॉय किए गए स्कीमा, क्वेरी, और म्यूटेशन का प्रोटोटाइप बनाने में मदद मिलती है. प्रोटोटाइप बनाते समय, यह क्लाइंट-साइड एसडीके भी अपने-आप जनरेट करता है.

जब आपने अपने सेवा और क्लाइंट ऐप्लिकेशन के अपडेट को दोहराया हो, तो सर्वर और क्लाइंट-साइड, दोनों अपडेट डिप्लॉय करने के लिए तैयार होते हैं.

क्लाइंट डेवलपमेंट वर्कफ़्लो क्या है?

अगर आपने शुरू करें सेक्शन में दिए गए निर्देशों का पालन किया है, तो आपको SQL Connect के लिए डेवलपमेंट के पूरे फ़्लो के बारे में जानकारी मिल गई होगी. इस गाइड में, आपको अपने स्कीमा से Flutter SDK टूल जनरेट करने और क्लाइंट क्वेरी और म्यूटेशन के साथ काम करने के बारे में ज़्यादा जानकारी मिलेगी.

संक्षेप में, अपने क्लाइंट ऐप्लिकेशन में जनरेट किए गए Flutter SDK टूल इस्तेमाल करने के लिए, आपको ये ज़रूरी चरण पूरे करने होंगे:

  1. अपने Flutter ऐप्लिकेशन में Firebase जोड़ें.
  2. flutterfire सीएलआई dart pub global activate flutterfire_cli इंस्टॉल करें.
  3. flutterfire configure चलाएं.

इसके बाद:

  1. अपने ऐप्लिकेशन का स्कीमा डेवलप करें.
  2. एसडीके जनरेशन सेट अप करना:

  3. अपने क्लाइंट कोड को शुरू करें और लाइब्रेरी इंपोर्ट करें.

  4. क्वेरी और म्यूटेशन के लिए कॉल लागू करें.

  5. SQL Connect एम्युलेटर को सेट अप करें और उसका इस्तेमाल करें. इसके बाद, दोबारा कोशिश करें.

Flutter SDK जनरेट करना

अपने ऐप्लिकेशन में SQL Connect से जनरेट किए गए एसडीके टूल सेट अप करने के लिए, Firebase सीएलआई का इस्तेमाल करें. init कमांड को मौजूदा फ़ोल्डर में मौजूद सभी ऐप्लिकेशन का पता लगाना चाहिए और जनरेट किए गए एसडीके टूल अपने-आप इंस्टॉल करने चाहिए.

firebase init dataconnect:sdk

प्रोटोटाइप बनाते समय एसडीके अपडेट करना

अगर आपके पास SQL Connect VS Code एक्सटेंशन इंस्टॉल है, तो यह जनरेट किए गए एसडीके को हमेशा अप-टू-डेट रखेगा.

अगर SQL Connect VS Code एक्सटेंशन का इस्तेमाल नहीं किया जाता है, तो जनरेट किए गए SDK टूल को अप-टू-डेट रखने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.

firebase dataconnect:sdk:generate --watch

बिल्ड पाइपलाइन में एसडीके जनरेट करना

सीआई/सीडी बिल्ड प्रोसेस में SQL Connect SDK टूल जनरेट करने के लिए, Firebase CLI का इस्तेमाल किया जा सकता है.

firebase dataconnect:sdk:generate

क्लाइंट कोड सेट अप करना

SQL Connect ऐप्लिकेशन को शुरू करना

सबसे पहले, Firebase सेटअप करने के स्टैंडर्ड निर्देशों का इस्तेमाल करके, अपना ऐप्लिकेशन शुरू करें.

इसके बाद, SQL Connect प्लगिन इंस्टॉल करें:

flutter pub add firebase_data_connect

SQL Connect Flutter SDK टूल को शुरू करना

SQL Connect को सेट अप करने के लिए इस्तेमाल की गई जानकारी का इस्तेमाल करके, SQL Connect इंस्टेंस को शुरू करें. यह जानकारी, Firebase कंसोल के डेटाबेस और स्टोरेज > एसक्यूएल कनेक्ट पेज पर मिलेगी.

लाइब्रेरी इंपोर्ट करना

अपने क्लाइंट कोड को शुरू करने के लिए, आपको दो तरह के इंपोर्ट की ज़रूरत होती है. पहला, सामान्य 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();

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();

बदलावों की सूचनाएं पाने के लिए सदस्यता लें

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", "30s", "1h30m".

    maxAge की डिफ़ॉल्ट वैल्यू 0 है. इसका मतलब है कि जवाबों को कैश मेमोरी में सेव किया जाता है, लेकिन क्लाइंट एसडीके हमेशा नई वैल्यू फ़ेच करेगा. कैश मेमोरी में सेव की गई वैल्यू का इस्तेमाल सिर्फ़ तब किया जाएगा, जब 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