Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Fabric Apps poskytuje typovo bezpečný GraphQL klient, ktorý vám umožní vykonávať operácie vytvárania, čítania, aktualizácie a mazania bez písania surových dotazov. Klient automaticky generuje GraphQL z vašich volaní metód a vracia typované entity na základe definícií vášho dátového modelu.
Predpoklady
- Projekt Fabric Apps s definovanými dátovými modelmi. Pozri Definovať dátové modely.
- Backendové služby bežali lokálne alebo boli nasadené na Fabric.
Inicializujte klienta
Inštancujte RayfinClient pomocou vašej backend URL, publikovateľného kľúča a typu schémy:
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',
});
Generický typ argument umožňuje TypeScriptu poskytovať automatické dopĺňanie a kontrolu typov pre všetky dátové operácie.
Čítať údaje
Pristupujte k kolekciám entít cez client.data.<EntityName>. API Fluent poskytuje metódy na dotazovanie, filtrovanie, triedenie a stránkovanie.
Načítajte všetky záznamy
const notes = await client.data.Note.select([
'id',
'title',
'content',
'createdAt',
'isPinned',
]).execute();
Získanie jedného záznamu pomocou primárneho kľúča
const note = await client.data.Note.findByPk('00000000-0000-0000-0000-000000000000');
Tým sa vráti úplná entita alebo null ak žiadny záznam s týmto ID neexistuje.
Filtračné záznamy
Použite metódu where() na filtrovanie výsledkov:
const pinnedNotes = await client.data.Note.select([
'id',
'title',
'isPinned',
])
.where({ isPinned: { eq: true } })
.execute();
Operátory filtra
| Operátor | Description | Príklad |
|---|---|---|
eq |
Rovná sa | { status: { eq: 'active' } } |
ne |
Nie rovní | { status: { ne: 'archived' } } |
gt |
Väčšie | { age: { gt: 18 } } |
gte |
Väčšie alebo rovné | { age: { gte: 21 } } |
lt |
Menšie | { price: { lt: 100 } } |
lte |
Menšie alebo rovné | { price: { lte: 50 } } |
contains |
Obsahuje podreťazec | { title: { contains: 'draft' } } |
Zoradiť výsledky
Použitie orderBy() na triedenie výsledkov dotazov:
const notes = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.execute();
Zoradiť podľa viacerých stĺpcov:
const notes = await client.data.Note.select([
'id',
'title',
'isPinned',
'createdAt',
])
.orderBy({ isPinned: 'desc' })
.orderBy({ createdAt: 'desc' })
.execute();
Navigujte vzťahy
Keď definujete vzťahy s @one() a @many() dekorátormi, môžete do toho istého dotazu zahrnúť súvisiace entity polia:
const notes = await client.data.Note.select([
'id',
'title',
'content',
'notebook.id',
'notebook.name',
'notebook.color',
])
.execute();
Každá poznámka obsahuje priradené údaje z notebooku bez potreby samostatného dotazu.
Paginujte veľké množiny výsledkov
Používajte stránkovanie na báze kurzora pre veľké zoznamy:
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);
Načítajte ďalšiu stránku pomocou kurzora:
if (page.hasNextPage) {
const nextPage = await client.data.Note.select([
'id',
'title',
'createdAt',
])
.orderBy({ createdAt: 'desc' })
.first(25)
.after(page.endCursor)
.executePaginated();
}
Poznámka
Vlastnosť totalCount sa zobrazuje na type PagedResult mape, ale nie je obsadená backendom. Použite items.length na počítanie výsledkov na aktuálnej stránke.
Vytváraj záznamy
Použite metódu vkladania nových záznamov create() :
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',
});
Metóda vráti vytvorenú entitu so všetkými poliami vyplnenými, vrátane automaticky generovaného id.
Vytvárajte záznamy s vzťahmi
Pri vytváraní entít, ktoré majú vzťahy, odovzdajte buď celý súvisiaci objekt, alebo objekt len s primárnym kľúčom:
// 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(),
});
Obe formy vedú k rovnakému výsledku. Použite prvý formulár, keď už poznáte ID príbuzného subjektu a chcete sa vyhnúť ďalšiemu načítavaniu.
Aktualizačné záznamy
Použite túto metódu update() na úpravu existujúcich záznamov. Prejdite filter objekt a objekt obsahujúci polia na aktualizáciu:
await client.data.Note.update(
{ id: 'note-123' },
{
title: 'Updated title',
updatedAt: new Date(),
}
);
Vzťahy s aktualizáciou
Na zmenu vzťahu odovzdajte novú súvisiacu entitu alebo len jej ID:
// Move a note to a different notebook
await client.data.Note.update(
{ id: 'note-123' },
{ notebook: { id: 'new-notebook-789' } }
);
Vymazať záznamy
Použite metódu delete() na odstránenie záznamov zodpovedajúcich filtru:
await client.data.Note.delete({ id: 'note-123' });
Metóda sa vyrieši, keď backend potvrdí vymazanie. Ak žiadny záznam nezodpovedá filtru, metóda stále funguje.
Spracovanie autentifikácie
Keď je autentifikácia povolená, prihláste sa pred vykonaním dátových operácií:
await client.auth.signIn({ email, password });
// All subsequent data calls include authentication context
const notes = await client.data.Note.select(['id', 'title']).execute();
Klient automaticky pripája autentifikačnú reláciu ku všetkým dátovým API volaniam. Nemusíš manuálne odovzdávať žetóny.
Osvedčené postupy
- Vyberte len potrebné polia – Načítajte len tie polia, ktoré používate, aby ste zmenšili veľkosť užitočného zaťaženia a zlepšili výkon.
-
Používajte stránkovanie pre veľké zoznamy – Vyhnite sa načítavaniu tisícov záznamov naraz použitím
first()aexecutePaginated(). - Dávkové dotazy na vzťahy – Zahrňte súvisiace entity do rovnakého dotazu namiesto samostatných požiadaviek.
- Cache často pristupované dáta – Ukladajte statické referenčné dáta do pamäte, aby ste znížili API volania.
Aktuálne obmedzenia
- Táto metóda
count()nie je dostupná na klientovi Fluent. Vyberte minimálne polia a použiteresults.lengthich namiesto toho. - Vzťahy medzi mnohými a mnohými nie sú podporované. Použite explicitnú spojovaciu entitu s dvoma
@one()navigačnými dekorátormi. - Nehnuteľnosť
totalCountnaPagedResultnie je obsadená backendom.