Firebase SQL Connect ক্লায়েন্ট এসডিকে আপনাকে সরাসরি একটি ফায়ারবেস অ্যাপ থেকে আপনার সার্ভার-সাইড কোয়েরি এবং মিউটেশন কল করার সুযোগ দেয়। আপনি আপনার SQL Connect সার্ভিসে যে স্কিমা, কোয়েরি এবং মিউটেশনগুলো ডেপ্লয় করবেন, সেগুলোর ডিজাইন করার পাশাপাশি একটি কাস্টম ক্লায়েন্ট এসডিকে তৈরি করেন। তারপর, এই এসডিকে-র মেথডগুলো আপনার ক্লায়েন্ট লজিকে ইন্টিগ্রেট করেন।
আমরা অন্যত্র যেমন উল্লেখ করেছি, এটা মনে রাখা গুরুত্বপূর্ণ যে SQL Connect কোয়েরি এবং মিউটেশনগুলো ক্লায়েন্ট কোড দ্বারা সাবমিট করা হয় না এবং সার্ভারে এক্সিকিউট করা হয় না। পরিবর্তে, ডেপ্লয় করার সময়, SQL Connect অপারেশনগুলো ক্লাউড ফাংশনের মতো সার্ভারে সংরক্ষিত হয়। এর মানে হলো, বিদ্যমান ব্যবহারকারীদের (উদাহরণস্বরূপ, অ্যাপের পুরোনো সংস্করণগুলোতে) সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তনগুলো ডেপ্লয় করতে হবে।
এই কারণেই SQL Connect আপনাকে এমন একটি ডেভেলপার পরিবেশ এবং টুলিং প্রদান করে, যা দিয়ে আপনি আপনার সার্ভারে ডেপ্লয় করা স্কিমা, কোয়েরি এবং মিউটেশনগুলোর প্রোটোটাইপ তৈরি করতে পারেন। এছাড়াও, আপনি প্রোটোটাইপ করার সময় এটি স্বয়ংক্রিয়ভাবে ক্লায়েন্ট-সাইড SDK তৈরি করে দেয়।
যখন আপনি আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপগুলিতে আপডেটগুলি পুনরাবৃত্তি করবেন, তখন সার্ভার- এবং ক্লায়েন্ট-সাইড উভয় আপডেটই স্থাপনের জন্য প্রস্তুত হয়ে যাবে।
ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?
আপনি যদি ' Get started' অংশটি অনুসরণ করে থাকেন, তাহলে আপনাকে SQL Connect এর সামগ্রিক ডেভেলপমেন্ট ফ্লো-এর সাথে পরিচয় করিয়ে দেওয়া হয়েছে। এই গাইডে, আপনি আপনার স্কিমা থেকে Swift SDK তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার বিষয়ে আরও বিস্তারিত তথ্য পাবেন।
সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে জেনারেট করা সুইফট এসডিকে ব্যবহার করতে হলে, আপনাকে এই পূর্বশর্ত ধাপগুলো অনুসরণ করতে হবে:
- আপনার iOS অ্যাপে Firebase যোগ করুন।
জেনারেট করা SDK ব্যবহার করতে, এটিকে Xcode-এ একটি ডিপেন্ডেন্সি হিসেবে কনফিগার করুন।
Xcode-এর টপ নেভিগেশন বারে, File > Add Package Dependencies > Add Local নির্বাচন করুন এবং তৈরি হওয়া
Package.swiftফাইলটি যে ফোল্ডারে রয়েছে, সেটি বেছে নিন।
তারপর:
- আপনার অ্যাপের স্কিমা তৈরি করুন।
SDK জেনারেশন সেট আপ করুন:
- আমাদের SQL Connect VS Code এক্সটেনশনে থাকা 'Add SDK to app' বাটনটির মাধ্যমে
- আপনার
connector.yamlআপডেট করার মাধ্যমে
আপনার ক্লায়েন্ট কোড শুরু করুন এবং লাইব্রেরিগুলো ইম্পোর্ট করুন ।
SQL Connect এমুলেটরটি সেট আপ করে ব্যবহার করুন এবং পুনরাবৃত্তি করুন।
আপনার সুইফট এসডিকে তৈরি করুন
আপনার অ্যাপগুলিতে SQL Connect দ্বারা তৈরি SDK সেট আপ করতে Firebase CLI ব্যবহার করুন। init কমান্ডটি বর্তমান ফোল্ডারের সমস্ত অ্যাপ সনাক্ত করবে এবং তৈরি করা SDK-গুলি স্বয়ংক্রিয়ভাবে ইনস্টল করবে।
firebase init dataconnect:sdk
প্রোটোটাইপিং করার সময় SDK আপডেট করুন।
আপনার যদি SQL Connect VS Code এক্সটেনশনটি ইনস্টল করা থাকে, তাহলে এটি তৈরি করা SDK-গুলোকে সর্বদা হালনাগাদ রাখবে।
আপনি যদি SQL Connect VS Code এক্সটেনশন ব্যবহার না করেন, তাহলে তৈরি করা SDK-গুলো হালনাগাদ রাখতে Firebase CLI ব্যবহার করতে পারেন।
firebase dataconnect:sdk:generate --watchবিল্ড পাইপলাইনে SDK তৈরি করুন
আপনি CI/CD বিল্ড প্রসেসে SQL Connect SDK তৈরি করতে Firebase CLI ব্যবহার করতে পারেন।
firebase dataconnect:sdk:generateSQL Connect iOS SDK শুরু করুন
SQL Connect সেট আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছিলেন, তা দিয়ে আপনার SQL SQL Connect ইনস্ট্যান্সটি চালু করুন (এই সমস্ত তথ্য Firebase কনসোলের SQL Connect ট্যাবে পাওয়া যাবে)।
একটি কানেক্টর ইনস্ট্যান্স পাওয়া
আপনার কানেক্টরের জন্য কোডটি SQL 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 ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।
SQL Connect ওয়ার্কফ্লোতে, আপনি আপনার কোয়েরি এবং SDK আপডেট করার জন্য স্থানীয় ডেভেলপমেন্ট টুলিং ব্যবহার করতে পারেন।
তবে, আপনার ক্লায়েন্টদের একটি আপডেট করা সংস্করণ প্রকাশ করার আগে, পুরোনো ক্লায়েন্টগুলো অকার্যকর হয়ে যেতে পারে।
স্থিতিস্থাপক বাস্তবায়নের উদাহরণ
জেনারেটেড 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
}
ক্লায়েন্ট-সাইড ক্যাশিং সক্রিয় করুন
SQL Connect একটি ঐচ্ছিক ক্লায়েন্ট-সাইড ক্যাশিং বৈশিষ্ট্য রয়েছে, যা আপনি connector.yaml ফাইলটি সম্পাদনা করে সক্রিয় করতে পারেন। যখন এই বৈশিষ্ট্যটি সক্রিয় করা হয়, তখন তৈরি হওয়া ক্লায়েন্ট SDK-গুলো স্থানীয়ভাবে কোয়েরির প্রতিক্রিয়া ক্যাশ করে রাখে, যা আপনার অ্যাপের ডাটাবেস অনুরোধের সংখ্যা কমাতে পারে এবং নেটওয়ার্কের সংযোগ বিচ্ছিন্ন হলেও আপনার অ্যাপের ডাটাবেস-নির্ভর অংশগুলোকে কাজ করতে সক্ষম করে।
ক্লায়েন্ট-সাইড ক্যাশিং সক্রিয় করতে, আপনার কানেক্টর কনফিগারেশনে একটি ক্লায়েন্ট ক্যাশিং কনফিগারেশন যোগ করুন:
generate:
swiftSdk:
outputDir: "../ios"
package: "FirebaseDataConnectGenerated"
clientCache:
maxAge: 5s
storage: persistent
এই কনফিগারেশনটির দুটি প্যারামিটার রয়েছে, উভয়ই ঐচ্ছিক:
maxAge: ক্লায়েন্ট SDK নতুন মান আনার আগে একটি ক্যাশ করা প্রতিক্রিয়ার সর্বোচ্চ বয়স। উদাহরণ: "0", "30s", "1h30m"।maxAgeএর ডিফল্ট মান হলো0, যার অর্থ হলো রেসপন্সগুলো ক্যাশ করা থাকে, কিন্তু ক্লায়েন্ট SDK সর্বদা নতুন মান ফেচ করবে। ক্যাশ করা মানগুলো শুধুমাত্র তখনই ব্যবহৃত হবে যখনexecute()ফাংশনেCACHE_ONLYনির্দিষ্ট করা থাকবে।storage: ক্লায়েন্ট SDK-কে রেসপন্সগুলোpersistentস্টোরেজ অথবাmemoryক্যাশ করার জন্য কনফিগার করা যেতে পারে।persistentস্টোরেজে ক্যাশ করা ফলাফল অ্যাপ পুনরায় চালু করার পরেও অক্ষুণ্ণ থাকবে। iOS SDK-গুলোতে ডিফল্ট হলোpersistent।
আপনার কানেক্টরের ক্যাশিং কনফিগারেশন আপডেট করার পর, আপনার ক্লায়েন্ট SDK-গুলো পুনরায় তৈরি করুন এবং আপনার অ্যাপটি রি-বিল্ড করুন। এটি করার পরে, execute() ফাংশনটি রেসপন্স ক্যাশ করবে এবং আপনার কনফিগার করা পলিসি অনুযায়ী ক্যাশ করা ভ্যালুগুলো ব্যবহার করবে। এটি সাধারণত আপনার কোনো অতিরিক্ত পদক্ষেপ ছাড়াই স্বয়ংক্রিয়ভাবে ঘটে; তবে, নিম্নলিখিত বিষয়গুলো লক্ষ্য করুন:
execute()ফাংশনের ডিফল্ট আচরণ উপরে বর্ণিত হয়েছে: যদি কোনো কোয়েরির জন্য একটি ফলাফল ক্যাশ করা থাকে এবং ক্যাশ করা মানটিmaxAgeচেয়ে পুরোনো না হয়, তাহলে সেই ক্যাশ করা মানটিই ব্যবহার করা হয়। এই ডিফল্ট আচরণকেPREFER_CACHEপলিসি বলা হয়।আপনি
execute()ফাংশনের প্রতিটি কলে নির্দিষ্ট করে দিতে পারেন যে, এটি শুধুমাত্র ক্যাশ করা মান পরিবেশন করবে (CACHE_ONLY) অথবা শর্তহীনভাবে সার্ভার থেকে নতুন মান নিয়ে আসবে (SERVER_ONLY)।try await execute(fetchPolicy: .cacheOnly)try await execute(fetchPolicy: .serverOnly)আপনার iOS অ্যাপ্লিকেশনটির প্রোটোটাইপ তৈরি করুন এবং পরীক্ষা করুন
স্থানীয় এমুলেটর ব্যবহার করার জন্য ক্লায়েন্টদের নির্দেশ দিন।
আপনি SQL Connect VS Code এক্সটেনশন অথবা CLI থেকে SQL Connect এমুলেটরটি ব্যবহার করতে পারেন।
উভয় ক্ষেত্রেই এমুলেটরের সাথে সংযোগ করার জন্য অ্যাপটিকে প্রস্তুত করার পদ্ধতি একই।
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 appSQL Connect SDK-গুলিতে ডেটা টাইপ
SQL Connect সার্ভার সাধারণ এবং কাস্টম GraphQL ডেটা টাইপগুলো উপস্থাপন করে। SDK-তে এগুলো নিম্নরূপে প্রদর্শিত হয়।
SQL Connect ধরণ সুইফট স্ট্রিং স্ট্রিং ইন্ট ইন্ট ভাসা দ্বিগুণ বুলিয়ান বুল UUID UUID তারিখ ফায়ারবেস ডেটা কানেক্ট.লোকাল ডেট টাইমস্ট্যাম্প ফায়ারবেসকোর.টাইমস্ট্যাম্প Int64 Int64 যেকোনো FirebaseDataConnect.AnyValue