Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Rayfin SDK maakt gebruik van een decoratorgestuurd programmeermodel waarin u uw gegevensschema eenmaal in TypeScript definieert en automatisch api's ontvangt die gereed zijn voor productie, typeveilige clients en infrastructuur.
belangrijke concepten
Rayfin SDK combineert drie kernelementen:
- Decoratorgestuurd schema: TypeScript-decorators gebruiken om gegevensmodellen, machtigingen en relaties te definiëren.
- Automatische API-generatie: uw versierde klassen worden GraphQL-eindpunten zonder controllercode te schrijven.
- Typeveilige clients: Gegenereerde TypeScript-clients bieden compileertijdvalidatie voor query's en mutaties.
Hoe werkt het?
Wanneer u een Fabric-app maakt, loopt uw code door deze fasen:
| # | Stage | Wat gebeurt er? |
|---|---|---|
| 1 | Ontwikkelaar | U ontwerpt de app in de gewenste editor. |
| 2 | TypeScript | U schrijft entiteitsklassen in TypeScript. |
| 3 | Decorators | U annoteert klassen en velden met @entity, @uuid, @text, @role en andere decorateurs. |
| 4 | Schema | De CLI compileert de versierde klassen in een databaseschema, machtigingsbeleid en API-configuratie. |
| 5 | APIs | Het schema wordt gepubliceerd als GraphQL-eindpunten. |
| 6 | Client | De gegenereerde RayfinClient biedt een typeveilige data- en authenticatieclient voor die eindpunten. |
| 7 | Application | Uw front-endtoepassing verbruikt de client om gegevens te lezen en te schrijven. |
1. Gegevensmodellen definiëren met decorators
U definieert uw gegevensstructuur met behulp van TypeScript-klassen en decorators van @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. Schemageneratie
De Rayfin CLI (npx rayfin) analyseert uw gedecoreerde klassen en genereert:
- Databaseschema - Tabellen, kolommen, beperkingen en indexen
- API-configuratie - GraphQL-eindpuntdefinities
- Machtigingsbeleid - Beveiliging op rijniveau en toegangsbeheer op veldniveau
4. Typeveilig clientgebruik
GraphQL-API's zijn beschikbaar voor het uitvoeren van CRUD-bewerkingen in uw database. Rayfin SDK biedt standaard een dataclientbewerking om gegevens te lezen, te schrijven of te verwijderen.
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();
Naslaginformatie voor decorators
Rayfin SDK biedt decorators voor algemene patronen voor gegevensmodellering:
Entiteitsdecorateurs
| Decorateur | Purpose | Example |
|---|---|---|
@entity() |
Een klasse markeren als een database-entiteit | @entity() class Product |
Decorators voor eigenschappen
| Decorateur | Database-type | TypeScript-type |
|---|---|---|
@uuid() |
UNIQUEIDENTIFIER | string |
@text() |
NVARCHAR | string |
@int() |
INT | number |
@decimal() |
Decimaal | number |
@bool() |
BIT | boolean |
@date() |
DATETIME2 | Date |
Machtigingsinrichtingen
| Decorateur | Purpose |
|---|---|
@role() |
Machtigingen op basis van rollen definiëren |
Zie Gegevensmachtigingen definiëren voor autorisatiedetails.
Functions
Maak één UserDataFunctions instantie aan en registreer elke functie door aan te roepen udf.func(name, handler, connections?).
Volg deze regels wanneer je een functie definieert:
- Plaats de
RayfinContextparameter ergens in de handlerhandtekening. De runtime identificeert het op type, injecteert het en sluit het uit van de gegenereerde functie-invoer. - Verklaar een verbinding voor elk gedelegeerd token dat de functie nodig heeft. Laat de verbindingsarray weg voor functies die alleen app-data benaderen of geen gedelegeerde tokens nodig hebben.
Het volgende voorbeeld registreert een gewone functie en een functie die de aanroepcontext gebruikt:
import {
UserDataFunctions,
type RayfinContext,
} from '@microsoft/fabric-user-data-functions';
// Match rayfin/data/schema.ts so getDataClient() is fully typed.
import type { TripPlan } from '../../data/TripPlan.js';
type AppSchema = { TripPlan: TripPlan };
const udf = new UserDataFunctions();
udf.func('greet', async (name: string): Promise<string> => {
return `Hello, ${name}!`;
});
udf.func(
'whoAmI',
async (ctx: RayfinContext<AppSchema>): Promise<string> => {
return ctx.accessToken ? 'authenticated' : 'anonymous';
},
);
De RayfinContext levert de runtime-diensten van de functie:
| Lid | Purpose |
|---|---|
ctx.accessToken |
Biedt de Rayfin JSON Web Token (JWT) van de ingelogde gebruiker. Decodeer de sub claim om een stabiele gebruikers-ID te krijgen. |
ctx.Tokens.<Audience> |
Krijgt een door het platform verstrekte resourcetoken voor een publiek dat in de RayfinContext annotatie is opgegeven. Uitgerolde functies gebruiken de app-identiteit en de bijbehorende permissies. Voor details, zie Verbind functies met externe bronnen. |
ctx.getSecret('NAME') |
Haalt een geheim op voor de huidige aanroep. Geeft undefined terug als het geheim niet is ingesteld. |
ctx.getDataClient() |
Hiermee krijgt u de API voor getypeerde gegevens voor uw entiteiten. De client ondersteunt bewerkingen voor aanmaken, findManybijwerken, verwijderen en upserten. |
ctx.baseUrl |
Geeft het Rayfin-eindpunt voor het huidige item. |
ctx.publishableKey |
Biedt de publiceerbare sleutel voor het huidige item. |
Voor setup-, lokale debugging- en deployment-instructies, zie Use Functions in Fabric Apps.
Ontwikkelwerkstroom
Een typische ontwikkelingscyclus volgt dit patroon:
- Gegevensmodellen definiëren of wijzigen - TypeScript-klassen toevoegen of bijwerken met decorators
-
Test lokaal met externe back-end - voer
npm run devuit om de wijzigingen in de front-endcode te testen op uw app-back-end in Fabric. -
Implementeren naar Fabric - voer
npx rayfin upuit om te implementeren naar de beheerde Fabric-service en uw schemawijzigingen toe te passen.
Wijzigingen in uw TypeScript-modellen worden automatisch doorgegeven via de hele stack, van databaseschema naar API-eindpunten tot clienttypen.
Authorization
Machtigingen worden naast uw gegevensmodellen gedefinieerd met behulp van de @role decorator:
@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;
}
Deze aanpak zorgt voor het volgende:
- Beveiligingsregels leven naast de gegevens die ze beveiligen
- Typeveilige beleidsexpressies vangen fouten op tijdens het compileren
- Bij het herstructureren van entiteitsvelden worden machtigingscontroles automatisch bijgewerkt