Firebase Data Connect क्लाइंट एसडीके की मदद से, सर्वर-साइड की क्वेरी और म्यूटेशन को सीधे Firebase ऐप्लिकेशन से कॉल किया जा सकता है. स्कीमा, क्वेरी, और म्यूटेशन डिज़ाइन करते समय, कस्टम क्लाइंट एसडीके जनरेट किया जाता है. इन्हें Data Connect सेवा में डिप्लॉय किया जाता है. इसके बाद, इस एसडीके टूल के तरीकों को अपने क्लाइंट लॉजिक में इंटिग्रेट करें.
जैसा कि हमने यहां बताया है, यह ध्यान रखना ज़रूरी है कि Data Connect क्लाइंट कोड, क्वेरी और म्यूटेशन सबमिट नहीं करता है. इन्हें सर्वर पर लागू किया जाता है. इसके बजाय, डिप्लॉय किए जाने पर Data Connect कार्रवाइयों को Cloud Functions जैसे सर्वर पर सेव किया जाता है. इसका मतलब है कि आपको क्लाइंट-साइड में ज़रूरी बदलाव करने होंगे, ताकि मौजूदा उपयोगकर्ताओं को कोई परेशानी न हो. उदाहरण के लिए, ऐप्लिकेशन के पुराने वर्शन पर.
इसलिए, Data Connect आपको डेवलपर एनवायरमेंट और टूलिंग उपलब्ध कराता है. इससे आपको सर्वर पर डिप्लॉय किए गए स्कीमा, क्वेरी, और म्यूटेशन का प्रोटोटाइप बनाने में मदद मिलती है. प्रोटोटाइप बनाते समय, यह क्लाइंट-साइड एसडीके भी अपने-आप जनरेट करता है.
जब आपने अपनी सेवा और क्लाइंट ऐप्लिकेशन में अपडेट कर लिए हों, तब सर्वर और क्लाइंट, दोनों के अपडेट डिप्लॉय करने के लिए तैयार होते हैं.
क्लाइंट डेवलपमेंट का वर्कफ़्लो क्या है?
अगर आपने शुरू करें सेक्शन में दिए गए निर्देशों का पालन किया है, तो आपको Data Connect के लिए डेवलपमेंट के पूरे फ़्लो के बारे में जानकारी मिल गई होगी. इस गाइड में, आपको अपने स्कीमा से Swift SDK जनरेट करने के बारे में ज़्यादा जानकारी मिलेगी. साथ ही, क्लाइंट क्वेरी और म्यूटेशन के साथ काम करने के बारे में भी जानकारी मिलेगी.
संक्षेप में कहें, तो अपने क्लाइंट ऐप्लिकेशन में जनरेट किए गए Swift SDK टूल का इस्तेमाल करने के लिए, आपको ये ज़रूरी चरण पूरे करने होंगे:
- अपने iOS ऐप्लिकेशन में Firebase जोड़ें.
जनरेट किए गए एसडीके टूल का इस्तेमाल करने के लिए, इसे Xcode में डिपेंडेंसी के तौर पर कॉन्फ़िगर करें.
Xcode के सबसे ऊपर मौजूद नेविगेशन बार में, File > Add Package Dependencies > Add Local को चुनें. इसके बाद, जनरेट की गई
Package.swift
वाला फ़ोल्डर चुनें.
इसके बाद:
- अपने ऐप्लिकेशन का स्कीमा डेवलप करें.
एसडीके जनरेशन सेट अप करें:
- हमारे Data Connect VS Code एक्सटेंशन में मौजूद, ऐप्लिकेशन में SDK जोड़ें बटन की मदद से
- अपने
connector.yaml
को अपडेट करके
Data Connect एम्युलेटर को सेट अप और इस्तेमाल करें और दोहराएं.
Swift SDK टूल जनरेट करना
ज़्यादातर Firebase प्रोजेक्ट की तरह, आपके Firebase Data Connect क्लाइंट कोड पर काम, लोकल प्रोजेक्ट डायरेक्ट्री में होता है. क्लाइंट कोड जनरेट करने और उसे मैनेज करने के लिए, Data Connect VS Code एक्सटेंशन और Firebase CLI, दोनों ही अहम लोकल टूल हैं.
एसडीके जनरेट करने के विकल्प, dataconnect.yaml
आपके प्रोजेक्ट को शुरू करते समय जनरेट हुई फ़ाइल में मौजूद कई एंट्री से जुड़े होते हैं.
एसडीके जनरेट करने की प्रोसेस शुरू करना
अपनेconnector.yaml
में, outputDir
, package
, और (वेब एसडीके के लिए)
packageJsonDir
जोड़ें.
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
यह बताता है कि जनरेट किए गए एसडीके को कहां आउटपुट करना चाहिए. अगर यह विकल्प नहीं दिया जाता है, तो कनेक्टर फ़ोल्डर का इस्तेमाल डिफ़ॉल्ट आउटपुट डायरेक्ट्री के तौर पर किया जाता है.
package
जनरेट किए जाने वाले पैकेज का नाम बताता है. जनरेटर, पैकेज के नाम से एक फ़ोल्डर बनाएगा. इसमें Package.swift
और जनरेट किया गया कोड शामिल होगा.
observablePublisher
(ज़रूरी नहीं) यह क्वेरी रेफ़रंस में इस्तेमाल करने के लिए, Observable पब्लिशर के बारे में बताता है. संभावित वैल्यू observableMacro
(iOS 17 और इसके बाद के वर्शन) और observableObject
(iOS 17 से पहले के वर्शन) हैं. अगर कोई वैल्यू तय नहीं की गई है, तो डिफ़ॉल्ट वैल्यू observableMacro
होती है.
प्रोटोटाइपिंग के दौरान एसडीके अपडेट करना
अगर Data Connect VS Code एक्सटेंशन और इसके Data Connect एम्युलेटर की मदद से इंटरैक्टिव प्रोटोटाइपिंग की जा रही है, तो स्कीमा, क्वेरी, और म्यूटेशन तय करने वाली .gql
फ़ाइलों में बदलाव करते समय, एसडीके की सोर्स फ़ाइलें अपने-आप जनरेट और अपडेट हो जाती हैं. यह सुविधा, हॉट (री)लोडिंग वर्कफ़्लो में मददगार हो सकती है.
.gql
अपडेट पर नज़र रखी जा सकती है. साथ ही, एसडीके के सोर्स अपने-आप अपडेट हो सकते हैं.
इसके अलावा, .gql फ़ाइलों में बदलाव होने पर, SDK टूल को फिर से जनरेट करने के लिए, CLI का इस्तेमाल किया जा सकता है:
firebase dataconnect:sdk:generate --watch
इंटिग्रेशन और प्रोडक्शन रिलीज़ के लिए एसडीके जनरेट करना
कुछ मामलों में, जैसे कि सीआई टेस्ट के लिए प्रोजेक्ट सोर्स तैयार करते समय, बैच अपडेट के लिए Firebase सीएलआई को कॉल किया जा सकता है.
ऐसे मामलों में, firebase dataconnect:sdk:generate
का इस्तेमाल करें.
Data Connect iOS SDK को शुरू करना
डेटा कनेक्ट को सेट अप करने के लिए इस्तेमाल की गई जानकारी का इस्तेमाल करके, अपने Data Connect इंस्टेंस को शुरू करें. यह जानकारी, Data Connect कंसोल के डेटा कनेक्ट टैब में उपलब्ध है.Firebase
कनेक्टर इंस्टेंस पाना
आपके कनेक्टर का कोड, Data Connect एम्युलेटर जनरेट करेगा. अगर आपके कनेक्टर का नाम movies
है और पैकेज का नाम movies
है, जैसा कि connector.yaml
में बताया गया है, तो कनेक्टर ऑब्जेक्ट को इस तरीके से वापस पाएं:
let connector = DataConnect.moviesConnector
क्वेरी और म्यूटेशन लागू करना
कनेक्टर ऑब्जेक्ट की मदद से, GraphQL सोर्स कोड में तय की गई क्वेरी और म्यूटेशन चलाए जा सकते हैं. मान लें कि आपके कनेक्टर में ये कार्रवाइयां तय की गई हैं:
mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
query getMovieByKey($key: Movie_Key!) {
movie(key: $key) { id title }
}
query listMoviesByGenre($genre: String!) {
movies(where: {genre: {eq: $genre}}) {
id
title
}
}
इसके बाद, इस तरह मूवी बनाई जा सकती है:
let mutationResult = try await connector.createMovieMutation.execute(
title: "Empire Strikes Back",
releaseYear: 1980,
genre: "Sci-Fi",
rating: 5)
print("Movie ID: \(mutationResult.data.movie_insert.id)")
किसी मूवी को वापस पाने के लिए, क्वेरी रेफ़रंस का इस्तेमाल किया जाएगा. सभी क्वेरी रेफ़रंस, Observable पब्लिशर हैं. कॉन्फ़िगर किए गए पब्लिशर के आधार पर (connector.yaml)
देखें), वे या तो @Observable
मैक्रो (iOS 17+) के साथ काम करते हैं या ObservableObject
प्रोटोकॉल लागू करते हैं. अगर कोई मैक्रो नहीं बताया गया है, तो डिफ़ॉल्ट रूप से iOS 17 या इसके बाद के वर्शन पर काम करने वाला @Observable
मैक्रो इस्तेमाल किया जाता है.
SwiftUI व्यू में, क्वेरी के नतीजों को क्वेरी रेफ़ के पब्लिश किए गए data
वैरिएबल का इस्तेमाल करके बाइंड किया जा सकता है. साथ ही, डेटा अपडेट करने के लिए क्वेरी के execute()
तरीके को कॉल किया जा सकता है. data
वैरिएबल, उस डेटा के शेप से मेल खाएगा जिसे आपकी GQL क्वेरी की परिभाषा में तय किया गया था.
सभी नतीजे, Decodable
प्रोटोकॉल के मुताबिक होते हैं. अगर आपने GQL फ़ेच में ऑब्जेक्ट की प्राइमरी कुंजी शामिल की है, तो ऑब्जेक्ट भी Identifiable
होते हैं. इससे आपको उनका इस्तेमाल इटरेटर में करने की अनुमति मिलती है.
struct ListMovieView: View {
@StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
var body: some View {
VStack {
Button {
Task {
do {
try await refresh()
} catch {
print("Failed to refresh: \(error)")
}
}
} label: {
Text("Refresh")
}
// use the query results in a view
ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
Text(movie.title)
}
}
}
@MainActor
func refresh() async throws {
_ = try await queryRef.execute()
}
}
क्वेरी को एक बार में भी एक्ज़ीक्यूट किया जा सकता है.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
गिनती वाले फ़ील्ड में हुए बदलावों को हैंडल करना
किसी ऐप्लिकेशन के स्कीमा में गिनती की जानकारी शामिल हो सकती है. इसे आपकी GraphQL क्वेरी ऐक्सेस कर सकती हैं.
ऐप्लिकेशन के डिज़ाइन में बदलाव होने पर, इस्तेमाल की जा सकने वाली नई enum वैल्यू जोड़ी जा सकती हैं. उदाहरण के लिए,
मान लें कि ऐप्लिकेशन के लाइफ़साइकल में बाद में, आपने AspectRatio
enum में FULLSCREEN वैल्यू जोड़ने का फ़ैसला किया.
Data Connect वर्कफ़्लो में, स्थानीय डेवलपमेंट टूलिंग का इस्तेमाल करके अपनी क्वेरी और एसडीके अपडेट किए जा सकते हैं.
हालांकि, क्लाइंट के अपडेट किए गए वर्शन को रिलीज़ करने से पहले, हो सकता है कि पहले से डिप्लॉय किए गए क्लाइंट काम न करें.
रीसाइलेंट तरीके से लागू करने का उदाहरण
जनरेट किया गया SDK, अज्ञात वैल्यू को हैंडल करने के लिए मजबूर करता है, क्योंकि जनरेट किए गए enum में _UNKNOWN
वैल्यू होती है. साथ ही, Swift में स्विच स्टेटमेंट को पूरी तरह से लागू किया जाता है.
do {
let result = try await DataConnect.moviesConnector.listMovies.execute()
if let data = result.data {
for movie in data.movies {
switch movie.aspectratio {
case .ACADEMY: print("academy")
case .WIDESCREEN: print("widescreen")
case .ANAMORPHIC: print("anamorphic")
case ._UNKNOWN(let unknownAspect): print(unknownAspect)
}
}
}
} catch {
// handle error
}
अपने iOS ऐप्लिकेशन का प्रोटोटाइप बनाना और उसे टेस्ट करना
लोकल एम्युलेटर का इस्तेमाल करने के लिए क्लाइंट को इंस्ट्रूमेंट करना
Data Connect एम्युलेटर का इस्तेमाल किया जा सकता है. इसे Data Connect VS Code एक्सटेंशन या सीएलआई से ऐक्सेस किया जा सकता है.
ऐप्लिकेशन को एम्युलेटर से कनेक्ट करने के लिए, दोनों ही स्थितियों में एक ही तरीका इस्तेमाल किया जाता है.
let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)
// Make calls from your app
Data Connect SDK टूल में डेटा टाइप
Data Connect सर्वर, सामान्य और कस्टम GraphQL डेटा टाइप दिखाता है. इन्हें एसडीके में इस तरह दिखाया जाता है.
डेटा कनेक्ट टाइप | Swift |
---|---|
स्ट्रिंग | स्ट्रिंग |
Int | Int |
फ़्लोट | डबल-साइज़ बेड |
बूलियन | बूल |
यूयूआईडी | यूयूआईडी |
तारीख | FirebaseDataConnect.LocalDate |
टाइमस्टैम्प | FirebaseCore.Timestamp |
Int64 | Int64 |
कोई भी | FirebaseDataConnect.AnyValue |