Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Rayfin SDK bruger en decorator-drevet programmeringsmodel, hvor du definerer dit dataskema én gang i TypeScript og automatisk modtager produktionsklare API'er, typesikre klienter og infrastruktur.
Nøglekoncepter
Rayfin SDK kombinerer tre kerneelementer:
- Decorator-drevet skema: Brug TypeScript-decoratorer til at definere datamodeller, tilladelser og relationer.
- Automatisk API-generering: Dine dekorerede klasser bliver GraphQL-endepunkter uden at skrive controller-kode.
- Type-sikre klienter: Genererede TypeScript-klienter leverer kompileringsvalidering for forespørgsler og mutationer.
Sådan fungerer det
Når du opretter en Fabric-app, flyder din kode gennem disse faser:
| # | Fase | Hvad sker der |
|---|---|---|
| 1 | Developer | Du laver appen i din foretrukne editor. |
| 2 | TypeScript | Du skriver entitetsklasser i TypeScript. |
| 3 | Dekoratører | Du annoterer klasser og felter med @entity, @uuid, , @text, @roleog andre dekoratører. |
| 4 | Schema | CLI'en kompilerer de dekorerede klasser til et databaseskema, tilladelsespolitikker og API-konfiguration. |
| 5 | API'er | Skemaet offentliggøres som GraphQL-endpoints. |
| 6 | Klient | Den genererede RayfinClient eksponerer en type-sikker data- og autentificeringsklient over disse endepunkter. |
| 7 | Applikation | Din frontend-applikation bruger klienten til at læse og skrive data. |
1. Definer datamodeller med dekoratorer
Du definerer din datastruktur ved hjælp af TypeScript-klasser og decoratorer fra @microsoft/rayfin-core:
import { entity, uuid, text, int } from '@microsoft/rayfin-core';
@entity()
export class Product {
@uuid() id!: string;
@text() name!: string;
@text({ optional: true }) description?: string;
@int() price!: number;
}
2. Skemagenerering
Rayfin CLI (npx rayfin) analyserer dine dekorerede klasser og genererer:
- Databaseskema - Tabeller, kolonner, begrænsninger og indekser
- API-konfiguration - GraphQL-endpointdefinitioner
- Tilladelsespolitikker - Række-niveau sikkerhed og adgangskontrol på feltniveau
4. Type-sikker klientbrug
GraphQL API'er er tilgængelige for at udføre CRUD-operationer på din database. Rayfin SDK leverer en dataklientfunktion direkte til at læse, skrive eller slette data.
import { RayfinClient } from '@microsoft/rayfin-client';
const client = new RayfinClient();
// TypeScript knows about Product fields
const products = await client.data.products.query()
.select(['id', 'name', 'price'])
.execute();
// Compile-time error if field doesn't exist
const invalid = await client.data.products.query()
.select(['nonexistentField']) // ❌ TypeScript error
.execute();
Dekorationsreference
Rayfin SDK leverer dekoratorer til almindelige datamodelleringsmønstre:
Entitetsdekoratører
| Dekoratør | Formål | Eksempel |
|---|---|---|
@entity() |
Markér en klasse som en databaseenhed | @entity() class Product |
Ejendomsdekoratører
| Dekoratør | Databasetype | TypeScript-type |
|---|---|---|
@uuid() |
UNIQUEIDENTIFIER | string |
@text() |
NVARCHAR | string |
@int() |
INT | number |
@decimal() |
DECIMAL | number |
@bool() |
BIT | boolean |
@date() |
DATETIME2 | Date |
Tilladelsesdekoratører
| Dekoratør | Formål |
|---|---|
@role() |
Definér rollebaserede tilladelser |
Se Definér datatilladelser for autorisationsdetaljer.
Udviklingsarbejdsgang
En typisk udviklingscyklus følger dette mønster:
- Definer eller ændr datamodeller - Tilføj eller opdater TypeScript-klasser med decorators
-
Test lokalt med remote backend - Kør
npm run devfor at teste dine ændringer i frontend-koden mod din app-backend i Fabric. -
Deploy to Fabric - Kør
npx rayfin upfor at deploye til den managed Fabric-service og anvende dine skemaændringer.
Ændringer i dine TypeScript-modeller udbreder sig automatisk gennem hele stacken — fra databaseskema til API-endpoints til klienttyper.
Autorisation
Tilladelser defineres sammen med dine datamodeller ved hjælp af decoratoren @role :
@entity()
@role('authenticated', ['create', 'read', 'update', 'delete'], {
policy: (claims, item) => claims.sub.eq(item.userId)
})
export class UserDocument {
@uuid() id!: string;
@text() userId!: string;
@text() content!: string;
}
Denne tilgang sikrer:
- Sikkerhedsregler ligger ved siden af de data, de beskytter
- Type-sikre politikudtryk fanger fejl ved kompileringstid
- Refaktorering af entitetsfelter opdaterer automatisk tilladelsestjek