Firebase SQL Connect ক্লায়েন্ট SDK আপনাকে সরাসরি Firebase অ্যাপ থেকে সার্ভার-সাইড কোয়েরি ও মিউটেশন কল করতে দেয়। আপনি SQL Connect পরিষেবায় ডিপ্লয় করা স্কিমা, কোয়েরি ও মিউটেশন ডিজাইন করার সাথে সাথে কাস্টম ক্লায়েন্ট SDK তৈরি করেন। তারপর, আপনি এই SDK থেকে আপনার ক্লায়েন্ট লজিকে পদ্ধতিগুলি ইন্টিগ্রেট করেন।
আমরা অন্য কোথাও উল্লেখ করেছি যে, এটি মনে রাখা গুরুত্বপূর্ণ যে SQL Connect কোয়েরি এবং মিউটেশন ক্লায়েন্ট কোড দ্বারা জমা দেওয়া হয় না এবং সার্ভারে এক্সিকিউট করা হয়। পরিবর্তে, ডিপ্লয় করা হলে, SQL Connect অপারেশন ক্লাউড ফাংশনের মতো সার্ভারে স্টোর করা হয়। এর অর্থ হল, আগে থেকে থাকা ব্যবহারকারীদের (যেমন, অ্যাপের পুরনো ভার্সনে) কোনও সমস্যা এড়াতে আপনাকে সংশ্লিষ্ট ক্লায়েন্ট-সাইড পরিবর্তন প্রয়োগ করতে হবে।
সেই কারণে, SQL Connect আপনাকে একটি ডেভেলপার এনভায়রনমেন্ট এবং টুলিং প্রদান করে যা আপনাকে সার্ভার-ডিপ্লয়েড স্কিমা, কোয়েরি এবং মিউটেশনের প্রোটোটাইপ করতে দেয়। আপনি প্রোটোটাইপ করার সময় এটি অটোমেটিক ক্লায়েন্ট-সাইড SDK তৈরি করে।
আপনার পরিষেবা এবং ক্লায়েন্ট অ্যাপে আপডেটগুলি পুনরাবৃত্তি করার পরে, সার্ভার এবং ক্লায়েন্ট-সাইড উভয় আপডেটই ডিপ্লয় করার জন্য প্রস্তুত।
ক্লায়েন্ট ডেভেলপমেন্ট ওয়ার্কফ্লো কী?
আপনি যদি শুরু করুন বিকল্প অনুসরণ করেন, তাহলে আপনাকে SQL Connect-এর জন্য সামগ্রিক ডেভেলপমেন্ট ফ্লো সম্পর্কে জানানো হয়েছে। এই গাইড থেকে, আপনার স্কিমা থেকে Flutter SDK তৈরি করা এবং ক্লায়েন্ট কোয়েরি ও মিউটেশন নিয়ে কাজ করার ব্যাপারে আরও বিস্তারিত তথ্য পাবেন।
সংক্ষেপে, আপনার ক্লায়েন্ট অ্যাপে জেনারেট করা Flutter SDK ব্যবহার করতে, আপনাকে এই পূর্বশর্তমূলক ধাপগুলি অনুসরণ করতে হবে:
- আপনার Flutter অ্যাপে Firebase যোগ করুন।
- flutterfire CLI
dart pub global activate flutterfire_cliইনস্টল করুন। flutterfire configureরান করুন।
তারপর:
- আপনার অ্যাপ স্কিমা ডেভেলপ করুন।
SDK জেনারেশন সেট-আপ করুন:
- আমাদের SQL Connect VS Code এক্সটেনশনে অ্যাপে SDK যোগ করুন বোতামের সাহায্যে
- আপনার
connector.yamlআপডেট করার মাধ্যমে।
আপনার ক্লায়েন্ট কোড ইনিশিয়ালাইজ করুন এবং লাইব্রেরি ইমপোর্ট করুন।
SQL Connect এমুলেটর সেট-আপ ও ব্যবহার করুন এবং ইটারেট করুন।
আপনার Flutter SDK জেনারেট করুন
আপনার অ্যাপে 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:generateক্লায়েন্ট কোড সেট-আপ করা
আপনার SQL Connect অ্যাপ শুরু করুন
প্রথমে, স্ট্যান্ডার্ড Firebase সেট-আপ নির্দেশাবলী ব্যবহার করে আপনার অ্যাপ ইনিশিয়ালাইজ করুন।
তারপর, SQL Connect প্লাগ-ইন ইনস্টল করুন:
flutter pub add firebase_data_connectSQL Connect Flutter SDK শুরু করুন
SQL Connect সেট-আপ করার জন্য আপনি যে তথ্য ব্যবহার করেছেন, সেটি ব্যবহার করে আপনার SQL Connect ইনস্ট্যান্স শুরু করুন। Firebase কনসোলের ডেটাবেস ও স্টোরেজ > SQL Connect পৃষ্ঠা থেকে এই তথ্য খুঁজে নিন।
লাইব্রেরি ইমপোর্ট করুন
আপনার ক্লায়েন্ট কোড চালু করার জন্য দুই সেট ইমপোর্ট প্রয়োজন, সাধারণ SQL 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();
পরিবর্তন সম্পর্কে জানতে সাবস্ক্রাইব করুন
SQL Connect থেকে রিয়েল-টাইম আপডেট পান দেখুন।
এনিউমারেশন ফিল্ডে পরিবর্তন ম্যানেজ করা
অ্যাপের স্কিমায় এনিউমারেশন থাকতে পারে, যা আপনার GraphQL কোয়েরি অ্যাক্সেস করতে পারে।
অ্যাপের ডিজাইন পরিবর্তন হওয়ার সাথে সাথে, আপনি নতুন enum সাপোর্ট করা ভ্যালু যোগ করতে পারেন। যেমন,
ধরুন, আপনার অ্যাপ্লিকেশনের লাইফসাইকেলের পরবর্তী পর্যায়ে আপনি AspectRatio enum-এ
FULLSCREEN ভ্যালু যোগ করার সিদ্ধান্ত নিয়েছেন।
SQL 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}');
}
}
ক্লায়েন্ট-সাইড ক্যাশিং চালু করুন
SQL Connect-এ একটি ঐচ্ছিক ক্লায়েন্ট-সাইড ক্যাশিং ফিচার আছে, যা আপনি
connector.yaml ফাইল এডিট করে চালু করতে পারবেন। এই ফিচার চালু করা হলে,
তৈরি করা ক্লায়েন্ট SDK স্থানীয়ভাবে কোয়েরির উত্তর ক্যাশে করবে, যা আপনার অ্যাপের করা
ডেটাবেস অনুরোধের সংখ্যা কমাতে পারে এবং নেটওয়ার্ক উপলভ্যতা বিঘ্নিত হলে
আপনার অ্যাপের ডেটাবেসের উপর নির্ভরশীল অংশগুলিকে কাজ করার জন্য
সক্ষম করে।
ক্লায়েন্ট-সাইড ক্যাশিং চালু করতে, আপনার কানেক্টর কনফিগারেশনে ক্লায়েন্ট ক্যাশিং কনফিগারেশন যোগ করুন:
generate:
javascriptSdk:
outputDir: ../dart/
package: "dataconnect_generated"
clientCache:
maxAge: 5s
storage: memory
এই কনফিগারেশনে দুটি প্যারামিটার আছে, দুটিই ঐচ্ছিক:
maxAge: ক্লায়েন্ট SDK নতুন ভ্যালু নিয়ে আসার আগে ক্যাশে করা উত্তরের সর্বাধিক বয়স। যেমন: "0", "30s", "1h30m"।maxAge-এর ডিফল্ট ভ্যালু হল0, যার অর্থ হল উত্তর ক্যাশে করা হয়, কিন্তু ক্লায়েন্ট SDK সবসময় নতুন ভ্যালু নিয়ে আসবে। ক্যাশে করা ভ্যালু শুধুমাত্র তখনই ব্যবহার করা হবে যখনCACHE_ONLY-কেexecute()হিসেবে নির্দিষ্ট করা হবে এবং প্রাথমিক ফলাফলsubscribe()থেকে পাওয়া যাবে।storage: ক্লায়েন্ট SDK-কে এমনভাবে কনফিগার করা যেতে পারে যাতে এটিpersistentস্টোরেজ বাmemory-এ উত্তর ক্যাশে করতে পারে।persistentস্টোরেজে ক্যাশে করা ফলাফল অ্যাপ রিস্টার্ট করার পরেও থেকে যাবে। Android বা iOS টার্গেট করার সময়, ডিফল্ট হলpersistent। ওয়েব ব্রাউজার টার্গেট করার সময়, শুধুমাত্রmemoryস্টোরেজ কাজ করে।
আপনার কানেক্টরের ক্যাশিং কনফিগারেশন আপডেট করার পরে, আপনার ক্লায়েন্ট SDK আবার তৈরি করুন
এবং আপনার অ্যাপ আবার তৈরি করুন। আপনি এটি করার পরে, 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 এক্সটেনশন বা CLI থেকে হোক না কেন।
এমুলেটরের সাথে কানেক্ট করার জন্য অ্যাপ ইন্সট্রুমেন্ট করা দুটি ক্ষেত্রেই একই রকম।
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 ডেটার ধরন দেখায়। এগুলি SDK-তে এইভাবে দেখানো হয়।
| SQL Connect ধরন | Dart |
|---|---|
| টাইমস্ট্যাম্প | firebase_data_connect.Timestamp |
| Int (32-bit) | int |
| তারিখ | DateTime |
| UUID | স্ট্রিং |
| Int64 | int |
| Float | ডবল |
| Boolean | বুলিয়ান |
| যেকোনও | firebase_data_connect.AnyValue |