Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Fabric Apps, ham sorgular yazmadan oluşturma, okuma, güncelleştirme ve silme işlemleri gerçekleştirmenize olanak tanıyan, tür açısından güvenli bir GraphQL istemcisi sağlar. İstemci, yöntem çağrılarınızdan otomatik olarak GraphQL oluşturur ve veri modeli tanımlarınıza göre yazılan varlıkları döndürür.
Prerequisites
- Veri modellerinin tanımlandığı bir Fabric Apps projesi. Bkz. Veri modellerini tanımlama.
- Yerel olarak çalışan veya Fabric’e dağıtılmış arka uç hizmetleri.
İstemciyi başlatma
RayfinClient öğesini arka uç URL’niz, yayınlanabilir anahtarınız ve şema türünüzle başlatın:
import { RayfinClient } from '@microsoft/rayfin-client';
import type { Note } from '../rayfin/data/Note';
import type { Notebook } from '../rayfin/data/Notebook';
type AppSchema = {
Note: Note;
Notebook: Notebook;
};
const client = new RayfinClient<AppSchema>({
baseUrl: import.meta.env.VITE_RAYFIN_API_URL ?? 'http://localhost:5168',
publishableKey: 'pk-your-project-key',
});
Genel tür bağımsız değişkeni, TypeScript'in tüm veri işlemleri için otomatik tamamlama ve tür denetimi sağlamasını sağlar.
Veriyi oku
client.data.<EntityName> aracılığıyla varlık koleksiyonlarına erişin. Akıcı API sorgulama, filtreleme, sıralama ve sayfalandırma yöntemleri sağlar.
Tüm kayıtları getir
const notes = await client.data.Note.select([
'id',
'title',
'content',
'createdAt',
'isPinned',
]).execute();
Birincil anahtara göre tek bir kayıt getir
const note = await client.data.Note.findByPk('00000000-0000-0000-0000-000000000000');
Bu, varlığın tamamını döndürür veya bu kimliğe sahip bir kayıt yoksa null döndürür.
Kayıtları filtreleme
Sonuçları filtrelemek where() için yöntemini kullanın:
const pinnedNotes = await client.data.Note.select([
'id',
'title',
'isPinned',
])
.where({ isPinned: { eq: true } })
.execute();
Filtre işleçleri
| Operator | Açıklama | Example |
|---|---|---|
eq |
Eşittir | { status: { eq: 'active' } } |
ne |
Eşit değil | { status: { ne: 'archived' } } |
gt |
Daha büyük | { age: { gt: 18 } } |
gte |
Büyüktür veya eşittir | { age: { gte: 21 } } |
lt |
Daha az | { price: { lt: 100 } } |
lte |
Küçüktür veya eşittir | { price: { lte: 50 } } |
contains |
Alt dize içerir | { title: { contains: 'draft' } } |
Sonuçları sıralama
Sorgu sonuçlarını sıralamak için kullanın orderBy() :
const notes = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.execute();
Birden çok sütuna göre sırala:
const notes = await client.data.Note.select([
'id',
'title',
'isPinned',
'createdAt',
])
.orderBy({ isPinned: 'desc' })
.orderBy({ createdAt: 'desc' })
.execute();
İlişkiler arasında gezin
ve @one() dekoratörleriyle @many() ilişkileri tanımlarken, aynı sorguya ilgili varlık alanlarını ekleyebilirsiniz:
const notes = await client.data.Note.select([
'id',
'title',
'content',
'notebook.id',
'notebook.name',
'notebook.color',
])
.execute();
Her not, ayrı bir sorgu gerektirmeden ilişkili not defteri verilerini içerir.
Büyük sonuç kümelerini sayfalandır
Büyük listeler için imleç tabanlı sayfalandırma kullanın:
const page = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.first(25)
.executePaginated();
console.log('Items:', page.items);
console.log('Has next page:', page.hasNextPage);
console.log('End cursor:', page.endCursor);
İmleci kullanarak sonraki sayfayı getirin:
if (page.hasNextPage) {
const nextPage = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.first(25)
.after(page.endCursor)
.executePaginated();
}
Uyarı
totalCount özelliği PagedResult türünde görünür, ancak arka uç tarafından doldurulmaz. Geçerli sayfadaki sonuçları saymak için kullanın items.length .
Kayıt oluşturma
create() Yeni kayıtlar eklemek için yöntemini kullanın:
const newNote = await client.data.Note.create({
title: 'Meeting notes',
content: 'Discussion points from the team sync',
isPinned: false,
isArchived: false,
createdAt: new Date(),
updatedAt: new Date(),
user_id: 'user-123',
});
yöntemi, otomatik oluşturulan idda dahil olmak üzere tüm alanları doldurulmuş olarak oluşturulan varlığı döndürür.
İlişkilerle kayıt oluşturma
İlişkileri olan varlıklar oluştururken, tam ilgili nesneyi veya yalnızca birincil anahtara sahip bir nesneyi geçirin:
// Option 1: Pass just the ID
const note = await client.data.Note.create({
title: 'Weekly summary',
content: 'Summary of this week',
notebook: { id: 'notebook-456' },
isPinned: false,
isArchived: false,
createdAt: new Date(),
updatedAt: new Date(),
});
// Option 2: Pass the full object
const notebook = await client.data.Notebook.findByPk('notebook-456');
const note = await client.data.Note.create({
title: 'Weekly summary',
content: 'Summary of this week',
notebook: notebook,
isPinned: false,
isArchived: false,
createdAt: new Date(),
updatedAt: new Date(),
});
Her iki form da aynı sonucu üretir. İlgili varlığın kimliğini (ID’sini) zaten biliyorsanız ve ek bir getirme işlemini önlemek istiyorsanız ilk formu kullanın.
Kayıtları güncelleştirme
update() Mevcut kayıtları değiştirmek için yöntemini kullanın. Bir filtre nesnesi ve güncellenecek alanları içeren bir nesne geçirin:
await client.data.Note.update(
{ id: 'note-123' },
{
title: 'Updated title',
updatedAt: new Date(),
}
);
İlişkileri güncelleştirme
Bir ilişkiyi değiştirmek için yeni ilgili varlığı veya yalnızca kimliğini iletin:
// Move a note to a different notebook
await client.data.Note.update(
{ id: 'note-123' },
{ notebook: { id: 'new-notebook-789' } }
);
Kayıtları silme
Filtreyle delete() eşleşen kayıtları kaldırmak için yöntemini kullanın:
await client.data.Note.delete({ id: 'note-123' });
Yöntem, arka uç silme işlemini onayladığında tamamlanır. Filtreyle eşleşen kayıt yoksa yöntem yine başarılı olur.
Kimlik doğrulamayı yönetme
Kimlik doğrulaması etkinleştirildiğinde, veri işlemlerini gerçekleştirmeden önce oturum açın:
await client.auth.signIn({ email, password });
// All subsequent data calls include authentication context
const notes = await client.data.Note.select(['id', 'title']).execute();
İstemci, kimlik doğrulama oturumunu tüm veri API'leri çağrılarına otomatik olarak ekler. Belirteçleri el ile geçirmeniz gerekmez.
En iyi uygulamalar
- Yalnızca gerekli alanları seçin : Yalnızca yük boyutunu küçültmek ve performansı geliştirmek için kullandığınız alanları getirin.
-
Büyük listeler için sayfalandırma kullanma – ve
first()kullanarakexecutePaginated()aynı anda binlerce kayıt getirmekten kaçının. - Toplu ilişki sorguları – Ayrı istekler yapmak yerine ilgili varlık alanlarını aynı sorguya ekleyin.
- Sık erişilen verileri önbelleğe alma – API çağrılarını azaltmak için statik başvuru verilerini bellekte depolayın.
Mevcut sınırlamalar
-
count()yöntemi akıcı istemcide kullanılamaz. Bunun yerine en az alanı seçin ve kullanınresults.length. - Çoktan çoğa ilişkiler desteklenmez. İki
@one()gezinti dekoratörüyle açık bir bağlantı varlığı kullanın. -
totalCountüzerindekiPagedResultözelliği arka uç tarafından doldurulmuyor.