Firebase SQL Connect istemci SDK'ları, sunucu tarafı sorgularınızı ve mutasyonlarınızı doğrudan bir Firebase uygulamasından çağırmanıza olanak tanır. SQL Connect hizmetinize dağıttığınız şemaları, sorguları ve mutasyonları tasarlarken paralel olarak özel bir istemci SDK'sı oluşturursunuz. Ardından, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.
Başka yerlerde de belirttiğimiz gibi, SQL Connect sorguların ve mutasyonların istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini unutmayın. Bunun yerine, dağıtıldığında SQL Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu, mevcut kullanıcıların (örneğin, uygulamanın eski sürümlerinde) sorun yaşamaması için istemci tarafında ilgili değişiklikleri yapmanız gerektiği anlamına gelir.
Bu nedenle SQL Connect, sunucuya dağıtılan şemalarınızın, sorgularınızın ve mutasyonlarınızın prototipini oluşturmanıza olanak tanıyan bir geliştirici ortamı ve araçlar sunar. Ayrıca prototip oluştururken istemci tarafı SDK'ları otomatik olarak oluşturur.
Hizmet ve istemci uygulamalarınızda güncellemeleri yinelediğinizde hem sunucu hem de istemci tarafı güncellemeleri dağıtıma hazır olur.
İstemci geliştirme iş akışı nedir?
Başlangıç bölümünü takip ettiyseniz SQL Connect için genel geliştirme akışını öğrenmişsinizdir. Bu kılavuzda, şemanızdan Flutter SDK'ları oluşturma ve istemci sorguları ile mutasyonlarıyla çalışma hakkında daha ayrıntılı bilgi bulabilirsiniz.
Özetlemek gerekirse, oluşturulan Flutter SDK'larını istemci uygulamalarınızda kullanmak için aşağıdaki ön koşul adımlarını uygulamanız gerekir:
- Firebase'i Flutter uygulamanıza ekleyin.
- flutterfire CLI'yı yükleyin
dart pub global activate flutterfire_cli. flutterfire configurekomutunu çalıştırın.
Ardından:
- Uygulama şemanızı geliştirin.
SDK oluşturma işlemini ayarlama:
- SQL Connect VS Code uzantımızdaki Add SDK to app (Uygulamaya SDK ekle) düğmesini kullanarak
connector.yamlayarlarınızı güncelleyerek.
İstemci kodunuzu ilk kullanıma hazırlayın ve kitaplıkları içe aktarın.
Sorgulara ve mutasyonlara çağrıları uygulayın.
SQL Connect emülatörünü kurup kullanın ve yineleyin.
Flutter SDK'nızı oluşturma
Uygulamalarınızda SQL Connect tarafından oluşturulan SDK'ları ayarlamak için Firebase CLI'yı kullanın.
init komutu, mevcut klasördeki tüm uygulamaları algılamalı ve oluşturulan SDK'ları otomatik olarak yüklemelidir.
firebase init dataconnect:sdk
Prototip oluştururken SDK'ları güncelleme
SQL Connect VS Code uzantısı yüklüyse oluşturulan SDK'lar her zaman güncel tutulur.
SQL Connect VS Code uzantısını kullanmıyorsanız oluşturulan SDK'ları güncel tutmak için Firebase CLI'yı kullanabilirsiniz.
firebase dataconnect:sdk:generate --watchDerleme ardışık düzenlerinde SDK oluşturma
CI/CD derleme süreçlerinde SQL Connect SDK'ları oluşturmak için Firebase CLI'yı kullanabilirsiniz.
firebase dataconnect:sdk:generateİstemci kodunu ayarlama
SQL Connect uygulamanızı başlatma
Öncelikle standart Firebase kurulum talimatlarını kullanarak uygulamanızı başlatın.
Ardından SQL Connect eklentisini yükleyin:
flutter pub add firebase_data_connectSQL Connect Flutter SDK'sını başlatma
SQL Connect örneğinizi, SQL Connect kurulumu için kullandığınız bilgileri kullanarak başlatın. Bu bilgileri Firebase konsolunun Databases & Storage (Veritabanları ve Depolama Alanı) > SQL Connect sayfasında bulabilirsiniz.
Kitaplıkları içe aktarma
İstemci kodunuzu ilk kullanıma hazırlamak için iki içe aktarma grubu gerekir: genel SQL Connect içe aktarmalar ve belirli, oluşturulan SDK içe aktarmaları.
// general imports
import 'package:firebase_data_connect/firebase_data_connect.dart';
// generated queries and mutations from SDK
import 'generated/movies.dart';
İstemci tarafında sorguları kullanma
Oluşturulan kod, önceden tanımlanmış sorgu referanslarıyla birlikte gelir. Tek yapmanız gereken, bunları içe aktarıp execute yöntemini çağırmaktır.
import 'generated/movies.dart';
await MoviesConnector.instance.listMovies().execute();
SDK sorgu yöntemlerini çağırma
Bu işlem kısayolu işlevlerini kullanan bir örneği aşağıda bulabilirsiniz:
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();
}
İsteğe bağlı alanlar
Bazı sorgularda isteğe bağlı alanlar olabilir. Bu durumlarda Flutter SDK'sı bir oluşturucu yöntemi sunar ve ayrı olarak ayarlanması gerekir.
Örneğin, createMovie çağrılırken rating alanı isteğe bağlıdır. Bu nedenle, bu alanı oluşturucu işlevinde sağlamanız gerekir.
await MoviesConnector.instance.createMovie( title: 'Empire Strikes Back', releaseYear: 1980, genre: 'Sci-Fi').rating(5).execute();
Değişikliklere abone olma
SQL Connect uygulamasından anlık güncellemeler alma başlıklı makaleyi inceleyin.
Numaralandırma alanlarındaki değişiklikleri işleme
Bir uygulamanın şeması, GraphQL sorgularınız tarafından erişilebilen numaralandırmalar içerebilir.
Uygulamanın tasarımı değiştikçe yeni enum desteklenen değerler ekleyebilirsiniz. Örneğin, uygulamanızın yaşam döngüsünün ilerleyen aşamalarında AspectRatio enum'una FULLSCREEN değerini eklemeye karar verdiğinizi varsayalım.
SQL Connect iş akışında, sorgularınızı ve SDK'larınızı güncellemek için yerel geliştirme araçlarını kullanabilirsiniz.
Ancak istemcilerinizin güncellenmiş bir sürümünü yayınlamadan önce, daha önce dağıtılan istemciler bozulabilir.
Esnek uygulama örneği
Oluşturulan SDK, bilinmeyen değerlerin işlenmesini zorunlu kılar. Yani istemci kodu, EnumValue nesnesini Known veya Unknown olarak açmalıdır.
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}');
}
}
İstemci tarafı önbelleğe almayı etkinleştirme
SQL Connect, connector.yaml dosyasını düzenleyerek etkinleştirebileceğiniz isteğe bağlı bir istemci tarafı önbelleğe alma özelliğine sahiptir. Bu özellik etkinleştirildiğinde, oluşturulan istemci SDK'ları sorgu yanıtlarını yerel olarak önbelleğe alır. Bu sayede uygulamanızın yaptığı veritabanı isteklerinin sayısı azalır ve ağ bağlantısı kesildiğinde uygulamanızın veritabanına bağlı bölümleri çalışmaya devam eder.
İstemci tarafı önbelleğe almayı etkinleştirmek için bağlayıcı yapılandırmanıza bir istemci önbelleğe alma yapılandırması ekleyin:
generate:
javascriptSdk:
outputDir: ../dart/
package: "dataconnect_generated"
clientCache:
maxAge: 5s
storage: memory
Bu yapılandırmanın her ikisi de isteğe bağlı olan iki parametresi vardır:
maxAge: İstemci SDK'sı yeni değerleri getirmeden önce önbelleğe alınmış bir yanıtın sahip olabileceği maksimum yaş. Örnekler: "0", "30s", "1h30m".maxAgeiçin varsayılan değer0olduğundan yanıtlar önbelleğe alınır ancak istemci SDK'sı her zaman yeni değerleri getirir. Önbelleğe alınan değerler yalnızcaCACHE_ONLY,execute()olarak belirtildiğinde vesubscribe()tarafından döndürülen ilk sonuçta kullanılır.storage: İstemci SDK'sı, yanıtlarıpersistentdepolama alanında veyamemoryiçinde önbelleğe alacak şekilde yapılandırılabilir.persistentdepolama alanında önbelleğe alınan sonuçlar, uygulama yeniden başlatıldığında da korunur. Android veya iOS hedeflenirken varsayılan değerpersistentolur. Web tarayıcıları hedeflenirken yalnızcamemorydepolama alanı desteklenir.
Bağlayıcınızın önbelleğe alma yapılandırmasını güncelledikten sonra istemci SDK'larınızı yeniden oluşturun ve uygulamanızı yeniden derleyin. Bu işlemi tamamladıktan sonra execute() ve subscribe(), yanıtları önbelleğe alır ve yapılandırdığınız politikaya göre önbelleğe alınmış değerleri kullanır. Bu işlem genellikle sizin ek bir işlem yapmanıza gerek kalmadan otomatik olarak gerçekleşir. Ancak aşağıdakilere dikkat edin:
execute()için varsayılan davranış yukarıda açıklandığı gibidir: Bir sorgu için sonuç önbelleğe alınmışsa ve önbelleğe alınan değermaxAgedeğerinden daha eski değilse önbelleğe alınan değer kullanılır. Bu varsayılan davranış,PREFER_CACHEpolitikası olarak adlandırılır.Ayrıca,
execute()için tek tek çağrılar belirterek yalnızca önbelleğe alınmış değerleri yayınlamasını (CACHE_ONLY) veya sunucudan koşulsuz olarak yeni değerleri getirmesini (SERVER_ONLY) sağlayabilirsiniz.await queryRef.execute(fetchPolicy: QueryFetchPolicy.cacheOnly);await queryRef.execute(fetchPolicy: QueryFetchPolicy.serverOnly);subscribe()yöntemini çağırdığınızda,maxAgeayarından bağımsız olarak, varsa önbelleğe alınmış içeriği her zaman hemen döndürür.execute()için sonraki çağrılar, yapılandırılanmaxAgeuyarınca dinleyicileri bilgilendirir.
İstemci tarafında mutasyonları kullanma
Mutasyonlara sorgularla aynı şekilde erişilebilir.
await MoviesConnector.instance.createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi" }).rating(5).execute();
Flutter uygulamalarınızın prototipini oluşturma ve test etme
İstemcileri yerel emülatör kullanacak şekilde ayarlama
SQL Connect emülatörünü SQL Connect VS Code uzantısından veya CLI'dan kullanabilirsiniz.
Uygulamayı emülatöre bağlanacak şekilde yapılandırma işlemi her iki senaryoda da aynıdır.
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();
Üretim kaynaklarına geçmek için emülatöre bağlanma satırlarını açıklama satırı yapın.
Dart SDK'sındaki veri türleri
SQL Connect sunucusu, yaygın GraphQL veri türlerini temsil eder. Bunlar SDK'da aşağıdaki gibi gösterilir.
| SQL Connect Türü | Dart |
|---|---|
| Zaman damgası | firebase_data_connect.Timestamp |
| Int (32 bit) | int |
| Tarih | DateTime |
| UUID | dize |
| Int64 | int |
| Kayan | çift |
| Boole | bool |
| Hepsi | firebase_data_connect.AnyValue |