Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fabric Alkalmazások típusbiztos GraphQL-ügyfelet biztosít, amellyel nyers lekérdezések írása nélkül végezhet létrehozási, olvasási, frissítési és törlési műveleteket. Az ügyfél automatikusan létrehozza a GraphQL-t a metódushívásokból, és gépelt entitásokat ad vissza az adatmodell definíciói alapján.
Prerequisites
- Egy Fabric Apps-projekt definiált adatmodellekkel. Lásd: Adatmodellek definiálása.
- A helyileg futó vagy a Fabric üzembe helyezett háttérszolgáltatások.
Az ügyfél inicializálása
Példányosítsa a(z) RayfinClient elemet a backend URL-jével, a publikálható kulccsal és a sématípussal:
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',
});
Az általános típusargumentum lehetővé teszi, hogy a TypeScript automatikus kiegészítést és típusellenőrzést biztosítson az összes adatművelethez.
Adatok beolvasása
Az entitásgyűjtemények elérése client.data.<EntityName> keresztül. A fluent API metódusokat biztosít a lekérdezéshez, szűréshez, rendezéshez és lapozáshoz.
Az összes rekord lekérése
const notes = await client.data.Note.select([
'id',
'title',
'content',
'createdAt',
'isPinned',
]).execute();
Egyetlen rekord lekérése elsődleges kulcs szerint
const note = await client.data.Note.findByPk('00000000-0000-0000-0000-000000000000');
Ez a teljes entitást adja vissza, vagy null ha nincs ilyen azonosítójú rekord.
Rekordok szűrése
Az eredmények szűréséhez használja a where() metódust:
const pinnedNotes = await client.data.Note.select([
'id',
'title',
'isPinned',
])
.where({ isPinned: { eq: true } })
.execute();
Operátorok szűrése
| Operator | Leírás | Example |
|---|---|---|
eq |
Equals | { status: { eq: 'active' } } |
ne |
Nem egyenlő | { status: { ne: 'archived' } } |
gt |
Nagyobb, mint | { age: { gt: 18 } } |
gte |
Nagyobb vagy egyenlő | { age: { gte: 21 } } |
lt |
Kevesebb, mint | { price: { lt: 100 } } |
lte |
Kisebb vagy egyenlő | { price: { lte: 50 } } |
contains |
Részkarakterláncot tartalmaz | { title: { contains: 'draft' } } |
Az eredmények rendezése
A(z) orderBy() használatával rendezheti a lekérdezés eredményeit:
const notes = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.execute();
Rendezés több oszlop szerint:
const notes = await client.data.Note.select([
'id',
'title',
'isPinned',
'createdAt',
])
.orderBy({ isPinned: 'desc' })
.orderBy({ createdAt: 'desc' })
.execute();
Kapcsolatok közötti navigálás
Amikor a kapcsolatokat a @one() és @many() dekorátorokkal definiálja, ugyanabban a lekérdezésben a kapcsolódó entitások mezőit is felveheti:
const notes = await client.data.Note.select([
'id',
'title',
'content',
'notebook.id',
'notebook.name',
'notebook.color',
])
.execute();
Minden jegyzet külön lekérdezés nélkül tartalmazza a kapcsolódó jegyzetfüzet-adatokat.
Nagy eredményhalmazok lapozása
Használjon kurzoralapú lapozást nagy listákhoz:
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);
A következő lap beolvasása a kurzor használatával:
if (page.hasNextPage) {
const nextPage = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.first(25)
.after(page.endCursor)
.executePaginated();
}
Megjegyzés:
A totalCount tulajdonság megjelenik a PagedResult típuson, de a háttérrendszer nem tölti ki. Az aktuális lapon lévő eredmények megszámlálására használható items.length .
Rekordok létrehozása
Új rekordok beszúrása a create() metódus használatával:
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',
});
A metódus a létrehozott entitást adja vissza az összes kitöltött mezővel, beleértve az automatikusan létrehozott entitást idis.
Rekordok létrehozása kapcsolatokkal
Kapcsolatokkal rendelkező entitások létrehozásakor adja át a teljes kapcsolódó objektumot, vagy csak az elsődleges kulccsal rendelkező objektumot:
// 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(),
});
Mindkét űrlap ugyanazt az eredményt hozza létre. Az első űrlapot akkor használja, ha már ismeri a kapcsolódó entitás azonosítóját, és el szeretné kerülni a további beolvasást.
Rekordok frissítése
A metódus használatával update() módosíthatja a meglévő rekordokat. Adjon át egy szűrőobjektumot és egy, a frissíteni kívánt mezőket tartalmazó objektumot:
await client.data.Note.update(
{ id: 'note-123' },
{
title: 'Updated title',
updatedAt: new Date(),
}
);
Kapcsolatok frissítése
Egy kapcsolat módosításához adja át az új kapcsolódó entitást vagy csak annak azonosítóját:
// Move a note to a different notebook
await client.data.Note.update(
{ id: 'note-123' },
{ notebook: { id: 'new-notebook-789' } }
);
Rekordok törlése
A módszerrel eltávolíthatja a delete() szűrőnek megfelelő rekordokat:
await client.data.Note.delete({ id: 'note-123' });
A metódus akkor szűnik meg, ha a háttérrendszer megerősíti a törlést. Ha egyetlen rekord sem egyezik a szűrővel, a metódus továbbra is sikeres lesz.
Hitelesítés kezelése
Ha a hitelesítés engedélyezve van, jelentkezzen be az adatműveletek végrehajtása előtt:
await client.auth.signIn({ email, password });
// All subsequent data calls include authentication context
const notes = await client.data.Note.select(['id', 'title']).execute();
Az ügyfél automatikusan csatolja a hitelesítési munkamenetet az összes adat API-híváshoz. Nem kell manuálisan megadnod a tokeneket.
Bevált gyakorlatok
- Csak a szükséges mezőket válassza ki – Az adatcsomag méretének csökkentése és a teljesítmény javítása érdekében csak azokat a mezőket kérje le, amelyeket használ.
-
Használjon lapozást nagy listákhoz – Kerülje el, hogy egyszerre több ezer rekordot kérjen le a
first()ésexecutePaginated()használatával. - Kötegkapcsolati lekérdezések – A kapcsolódó entitásmezők belefoglalása ugyanabba a lekérdezésbe ahelyett, hogy külön kéréseket készítenek.
- A gyakran használt adatok gyorsítótárazása – A statikus referenciaadatokat tárolja a memóriában az API-hívások csökkentése érdekében.
Jelenlegi korlátozások
- A
count()módszer nem érhető el a fluent ügyfélen. Jelöljön ki minimális mezőket, és használjonresults.lengthhelyette. - A több-a-többhöz kapcsolatok nem támogatottak. Használjon explicit kapcsolóentitást két
@one()navigációs deklarátorral. - A(z)
PagedResulttotalCounttulajdonságát a háttérrendszer nem tölti fel.