Firebase Data 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. Şemaları, sorguları ve mutasyonları tasarlarken özel bir istemci SDK'sı oluşturursunuz. Bu SDK'yı Data Connect hizmetinize dağıtırsınız. Ardından, bu SDK'daki yöntemleri istemci mantığınıza entegre edersiniz.
Başka bir yerde de belirttiğimiz gibi, Data Connect sorguların ve mutasyonların istemci kodu tarafından gönderilmediğini ve sunucuda yürütülmediğini unutmamak önemlidir. Bunun yerine, dağıtıldığında Data Connect işlemleri Cloud Functions gibi sunucuda depolanır. Bu nedenle, mevcut kullanıcıların (ör. uygulamanın eski sürümlerinde) deneyimini bozmamak için ilgili istemci tarafı değişikliklerini dağıtmanız gerekir.
Bu nedenle Data Connect, sunucuya dağıtılan şemalarınızı, sorgularınızı ve mutasyonlarınızı prototip oluşturmanıza olanak tanıyan bir geliştirme ortamı ve araçlar sunar. Ayrıca, prototip oluştururken istemci tarafı SDK'larını otomatik olarak oluşturur.
Hizmetinizde ve istemci uygulamalarınızda güncellemeleri yineledikten sonra hem sunucu hem de istemci tarafı güncellemeleri dağıtıma hazır olur.
Müşteri geliştirme iş akışı nedir?
Başlangıç bölümünü incelediyseniz Data Connect için genel geliştirme akışıyla tanışmışsınızdır. Bu kılavuzda, şemanızdan Web SDK'ları oluşturma ve istemci sorguları ile mutasyonlarla çalışma hakkında daha ayrıntılı bilgi edinebilirsiniz.
Özetlemek gerekirse, oluşturulan Web SDK'larını istemci uygulamalarınızda kullanmak için aşağıdaki ön koşul adımlarını uygulamanız gerekir:
- Firebase'i web uygulamanıza ekleyin.
Ardından:
- Uygulama şemanızı geliştirin.
- İstemci kodunuzu JavaScript SDK, React veya Angular kitaplıklarıyla başlatın.
- React ve Angular için Tanstack Query paketlerini yükleyin.
SDK oluşturmayı ayarlayın:
- Veri Bağlantısı VS Code uzantımızdaki SDK'yı uygulamaya ekle düğmesiyle
- JavaScript SDK için
connector.yaml
'nızı veya React ya da Angular'ı güncelleyerek.
Kitaplıkları ve oluşturulan kodu JavaScript SDK, React veya Angular ile içe aktarın.
JavaScript SDK, React veya Angular ile sorgulara ve mutasyonlara yönelik çağrıları uygulayın.
Data Connect emülatörünü JavaScript SDK, React veya Angular ile ayarlayarak test edin.
Firebase JavaScript SDK'sı ile istemci kodu uygulama
Bu bölümde, Firebase JavaScript SDK'sını kullanarak istemcileri nasıl uygulayabileceğiniz açıklanmaktadır.
React veya Angular kullanıyorsanız alternatif kurulum talimatlarını ve çerçeveler için Data Connect SDK'ları oluşturma hakkında ek dokümanlara yönelik bağlantıları inceleyin.
Uygulamanızı başlatma
Öncelikle uygulamanızı standart Firebase sırasını kullanarak başlatın.
initializeApp({...});
JavaScript SDK'nızı oluşturma
Çoğu Firebase projesinde olduğu gibi, Firebase Data Connect istemci kodunuzla ilgili çalışmalar yerel bir proje dizininde yapılır. Hem Data Connect VS Code uzantısı hem de Firebase CLI, istemci kodu oluşturma ve yönetme için önemli yerel araçlardır.
SDK oluşturma seçenekleri, projenizi ilk kullanıma hazırladığınızda oluşturulan dataconnect.yaml
dosyasındaki çeşitli girişlere göre belirlenir.
SDK oluşturmayı başlatma
connector.yaml
içinde outputDir
, package
ve (web SDK'sı için)
packageJsonDir
ekleyin.
generate:
javascriptSdk:
outputDir: "../movies-generated"
package: "@movie-app/movies"
packageJsonDir: "../../"
outputDir
, oluşturulan SDK'nın nereye çıkış yapacağını belirtir.
package
, paket adını belirtir.
packageJsonDir
paketin nereye yükleneceğini belirtir.
Bu durumda, bu bağımlılığın karşılanması için firebase@latest
öğesini yükleyin.
JavaScript SDK'sını başlatma
Veri Bağlantısı'nı ayarlamak için kullandığınız bilgileri kullanarak Data Connect örneğinizi başlatın (tümü Firebase konsolunun Veri Bağlantısı sekmesinde bulunur).
ConnectorConfig nesnesi
SDK için bağlayıcı yapılandırma nesnesi gerekir.
Bu nesne, dataconnect.yaml
içindeki serviceId
ve location
ile connector.yaml
içindeki connectorId
öğelerinden otomatik olarak oluşturulur.
Kitaplıkları içe aktarma
İstemci kodunuzu başlatmak için iki grup içe aktarma işlemi gerekir: genel Data Connect içe aktarma işlemleri ve belirli, oluşturulmuş SDK içe aktarma işlemleri.
Genel içe aktarmalara dahil edilen ConnectorConfig
nesnesine dikkat edin.
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// generated queries and mutations from SDK
import { listMovies, ListMoviesResponse, createMovie, connectorConfig } from '@myorg/myconnector';
JavaScript SDK'sından sorguları kullanma
Oluşturulan kodda önceden tanımlanmış sorgu referansları bulunur. Tek yapmanız gereken bunları içe aktarmak ve çalıştırmak.
import { executeQuery } from 'firebase/data-connect';
import { listMoviesRef } from '@movie-app/movies';
const ref = listMoviesRef();
const { data } = await executeQuery(ref);
console.log(data.movies);
SDK sorgu yöntemlerini çağırma
Bu işlem kısayolu işlevlerinin kullanıldığı bir örneği aşağıda bulabilirsiniz:
import { listMovies } from '@movie-app/movies';
function onBtnClick() {
// This will call the generated JS from the CLI and then make an HTTP request out
// to the server.
listMovies().then(data => showInUI(data)); // == executeQuery(listMoviesRef);
}
Değişikliklere abone olma
Değişikliklere abone olabilirsiniz (bu değişiklikler, sorgu yürüttüğünüz her seferde güncellenir).
const listRef = listAllMoviesRef();
// subscribe will immediately invoke the query if no execute was called on it previously.
subscribe(listRef, ({ data }) => {
updateUIWithMovies(data.movies);
});
await createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi", rating: 5 });\
await listMovies(); // will update the subscription above`
JavaScript SDK'sından mutasyonları kullanma
Mutasyonlara sorgularla aynı şekilde erişilebilir.
import { executeMutation } from 'firebase/data-connect';
import { createMovieRef } from '@movie-app/movies';
const { data } = await executeMutation(createMovieRef({ movie: 'Empire Strikes Back' }));
Data Connect emülatörüne bağlanma
Dilerseniz connectDataConnectEmulator
işlevini çağırıp Data Connect örneğini ileterek emülatöre bağlanabilirsiniz. Örneğin:
import { connectDataConnectEmulator } from 'firebase/data-connect';
import { connectorConfig } from '@myorg/myconnector'; // Replace with your package name
const dataConnect = getDataConnect(connectorConfig);
connectDataConnectEmulator(dataConnect, 'localhost', 9399);`
// Make calls from your app
Üretim kaynaklarına geçmek için emülatöre bağlanma satırlarını yorum satırı yapın.
React ve Angular için istemci kodu uygulama
Firebase Data Connect, Invertase'deki iş ortaklarımızdan edinilebilen kitaplıkları kullanarak React ve Angular için kancalar içeren bir SDK oluşturur: TanStack Query Firebase.
Bu kitaplık, uygulamalarınızda Firebase ile eşzamansız görevlerin işlenmesini büyük ölçüde kolaylaştıran bir dizi kanca sağlar.
Uygulamanızı başlatma
Öncelikle, diğer tüm Firebase web uygulamalarında olduğu gibi, uygulamanızı standart Firebase sırasını kullanarak başlatın.
initializeApp({...});
TanStack Query Firebase paketlerini yükleyin
Projenizde TanStack Query için paketler yükleyin.
Tepki ver
npm i --save @tanstack/react-query @tanstack-query-firebase/react
npm i --save firebase@latest # Note: React has a peer dependency on ^11.3.0
Angular
ng add @angular/fire
React veya Angular SDK'nızı oluşturun
Daha önce açıklandığı gibi, standart web SDK'sında olduğu gibi Firebase araçları, şemanıza ve işlemlerinize göre SDK'ların otomatik olarak oluşturulmasını sağlar.
Projeniz için React SDK'sı oluşturmak üzere connector.yaml
yapılandırma dosyanıza react
anahtarı ekleyin.
Tepki ver
generate:
javascriptSdk:
react: true
outputDir: "../movies-generated"
package: "@movie-app/movies"
packageJsonDir: "../../"
Angular
generate:
javascriptSdk:
angular: true
outputDir: "../movies-generated"
package: "@movie-app/movies"
packageJsonDir: "../../"
Kitaplıkları içe aktarma
React veya Angular istemci kodunuzu başlatmak için dört grup içe aktarma işlemi gerekir: genel Data Connect içe aktarma işlemleri, genel TanStack içe aktarma işlemleri ve JS ile React tarafından oluşturulan SDK'larınız için özel içe aktarma işlemleri.
Genel içe aktarma işlemlerine dahil edilen ConnectorConfig
türüne dikkat edin.
Tepki ver
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// TanStack Query-related functions
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
// generated queries and mutations from SDK
import { ListMoviesResponse, connectorConfig } from '@myorg/myconnector';
// generated React hooks from SDK
import { useListAllMovies, useCreateMovie } from "@myorg/connector/react";
Angular
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// TanStack Query-related functions
import { provideTanStackQuery, QueryClient } from "@tanstack/angular-query-experimental";
// generated queries and mutations from SDK
import { ListMoviesResponse, connectorConfig } from '@myorg/myconnector';
// generated React hooks from SDK
import { injectListAllMovies, injectCreateMovie } from "@myorg/connector/angular";
React veya Angular istemcinizde sorgu ve mutasyon kullanma
Kurulum tamamlandıktan sonra, oluşturulan SDK'daki yöntemleri dahil edebilirsiniz.
Aşağıdaki snippet'te, oluşturulan SDK'dan alınan React için use
önekli useListAllMovies
yöntemine ve Angular için inject
önekli injectListAllMovies
yöntemine dikkat edin.
Tepki ver
Oluşturulan SDK'daki tüm bu işlemler (hem sorgular hem de mutasyonlar) TanStackQuery bağlamalarını çağırır:
- Sorgular, TanStack
useDataConnectQuery
kancasını çağırır ve döndürür. - Değişiklikler, TanStack
useDataConnectMutation
kancasını çağırır ve döndürür.
import { useListAllMovies } from '@movies-app/movies/react';
function MyComponent() {
const { isLoading, data, error } = useListAllMovies();
if(isLoading) {
return <div>Loading...</div>
}
if(error) {
return <div> An Error Occurred: {error} </div>
}
}
// App.tsx
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import MyComponent from './my-component';
function App() {
const queryClient = new QueryClient();
return <QueryClientProvider client={queryClient}>
<MyComponent />
</QueryClientProvider>
}
Angular
import { injectAllMovies, connectorConfig } from '@movies-app/movies/angular';
import { provideDataConnect, getDataConnect } from '@angular/fire/data-connect';
import { provideTanStackQuery, QueryClient } from "@tanstack/angular-query-experimental";
const queryClient = new QueryClient();
...
providers: [
...
provideTanStackQuery(queryClient),
provideDataConnect(() => {
const dc = getDataConnect(connectorConfig);
return dc;
})
]
React ve Angular ile otomatik yeniden yükleme sorgularını kullanma
Veriler değiştiğinde sorguları otomatik olarak yeniden yüklenecek şekilde yapılandırabilirsiniz.
Tepki ver
export class MovieListComponent {
movies = useListAllMovies();
}
export class AddPostComponent {
const mutation = useCreateMovie({ invalidate: [listAllMoviesRef()] });
addMovie() {
// The following will automatically cause Tanstack to reload its listAllMovies query
mutation.mutate({ title: 'The Matrix });
}
}
Angular
// class
export class MovieListComponent {
movies = injectListAllMovies();
}
// template
@if (movies.isPending()) {
Loading...
}
@if (movies.error()) {
An error has occurred: {{ movies.error() }}
}
@if (movies.data(); as data) {
@for (movie of data.movies; track movie.id) {
<mat-card appearance="outlined">
<mat-card-content>{{movie.description}}</mat-card-content>
</mat-card>
} @empty {
<h2>No items!</h2>
}
}
Data Connect emülatörüne bağlanma
İsteğe bağlı olarak, connectDataConnectEmulator
numaralı telefonu arayıp Data Connect örneğini oluşturduğunuz kancaya ileterek emülatöre bağlanabilirsiniz. Örneğin:
Tepki ver
import { getDataConnect, connectDataConnectEmulator } from 'firebase/data-connect';
import { connectorConfig } from '@movies-app/movies';
import { useListAllMovies } from '@movies-app/movies/react';
const dc = getDataConnect(connectorConfig);
connectDataConnectEmulator(dc, 'localhost', 9399);
class AppComponent() {
...
const { isLoading, data, error } = useListAllMovies(dc);
...
}
Angular
// app.config.ts
import { provideDataConnect } from '@angular/fire/data-connect';
import { getDataConnect, connectDataConnectEmulator } from 'firebase/data-connect';
provideDataConnect(() => {
const dc = getDataConnect(connectorConfig);
connectDataConnectEmulator(dc, 'localhost', 9399);
return dc;
}),
Üretim kaynaklarına geçmek için emülatöre bağlanma satırlarını yorum satırı yapın.
SDK'daki veri türleri
Data Connect sunucusu, yaygın GraphQL veri türlerini temsil eder. Bunlar, SDK'da aşağıdaki gibi gösterilir.
Data Connect Türü | TypeScript |
---|---|
Zaman damgası | dize |
Tarih | dize |
UUID | dize |
Int64 | dize |
Çift | Sayı |
Kayan | Sayı |
SDK oluşturmayla ilgili dikkat edilmesi gereken noktalar
Yolları node_modules
'ya göre yapılandırma
JavaScript SDK'sında, Data Connect SDK'nızı yüklemek için npm link
kullandığından oluşturulan SDK'nız node_modules
yoluyla aynı düzeydeki bir dizine veya node_modules
'ye erişebilen bir alt dizine çıkış olarak verilmelidir.
Diğer bir deyişle, oluşturulan SDK'nızın doğru çalışması için firebase
node modülüne erişmesi gerekir.
Örneğin, node_modules
dosyanız my-app/
klasöründe bulunuyorsa js-email-generated
öğesinin üst klasörü node_modules
'dan içe aktarabilmesi için çıkış dizininiz my-app/js-email-generated
olmalıdır.
my-app/
dataconnect/
connector/
connector.yaml
node_modules/
firebase/
js-email-generated/
// connector.yaml
connectorId: "my-connector"
generate:
javascriptSdk:
outputDir: "../../js-email-generated"
package: "@myapp/my-connector"
Alternatif olarak, modüllerinizin kökte barındırıldığı bir monoreponuz varsa çıkış dizininizi monoreponuzdaki herhangi bir klasöre yerleştirebilirsiniz.
my-monorepo/
dataconnect/
connector/
connector.yaml
node_modules/
firebase/
my-app/
js-email-generated/
package.json
// connector.yaml
connectorId: "my-connector"
generate:
javascriptSdk:
outputDir: "../../my-app/js-email-generated" # You can also output to ../../js-email-generated
Prototip oluştururken SDK'ları güncelleme
Data Connect VS Code uzantısı ve Data Connect emülatörü ile etkileşimli prototip oluşturuyorsanız şemaları, sorguları ve mutasyonları tanımlayan .gql
dosyalarını değiştirirken SDK kaynak dosyaları otomatik olarak oluşturulur ve güncellenir. Bu özellik, sıcak yeniden yükleme iş akışlarında yararlı olabilir.
.gql
güncellemelerini izleyebilir ve SDK kaynaklarının otomatik olarak güncellenmesini sağlayabilirsiniz.
Alternatif olarak, .gql dosyaları her değiştirildiğinde SDK'ları yeniden oluşturmak için KSA'yı kullanabilirsiniz:
firebase dataconnect:sdk:generate --watch
Entegrasyon ve üretim sürümleri için SDK'lar oluşturma
CI testlerine göndermek üzere proje kaynaklarını hazırlama gibi bazı senaryolarda, toplu güncelleme için Firebase CLI'yı çağırabilirsiniz.
Bu durumlarda firebase dataconnect:sdk:generate
simgesini kullanın.