Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Rayfin SDK používá programovací model založený na dekorátorech, ve kterém stačí jednou definovat datové schéma v jazyce TypeScript a automaticky získáte produkčně připravená API, typově bezpečné klienty a infrastrukturu.
Klíčové koncepty
Sada Rayfin SDK kombinuje tři základní prvky:
- Schéma řízené dekorátorem: K definování datových modelů, oprávnění a relací použijte dekorátory TypeScriptu.
- Automatické generování rozhraní API: Upravené třídy se stanou koncovými body GraphQL bez psaní kódu kontroleru.
- Typově bezpeční klienti: Vygenerovaní klienti v jazyce TypeScript poskytují ověřování při kompilaci pro dotazy a mutace.
Jak to funguje
Když vytvoříte Fabric aplikaci, kód prochází těmito fázemi:
| # | Stage | Co se stane |
|---|---|---|
| 1 | Developer | Aplikaci vytvoříte v libovolném editoru. |
| 2 | TypeScript | Třídy entit píšete v TypeScriptu. |
| 3 | Decorators | Třídy a pole můžete komentovat pomocí @entity, @uuid, @text, @role, a dalších dekorátorů. |
| 4 | Schema | Rozhraní příkazového řádku zkompiluje upravené třídy do schématu databáze, zásad oprávnění a konfigurace rozhraní API. |
| 5 | APIs | Schéma je publikováno jako endpointy GraphQL. |
| 6 | Client | Vygenerovaný RayfinClient zpřístupňuje typově bezpečného klienta pro data a autentizaci nad těmito koncovými body. |
| 7 | Application | Front-endová aplikace využívá klienta ke čtení a zápisu dat. |
1. Definování datových modelů s dekorátory
Datovou strukturu definujete pomocí tříd TypeScriptu a dekorátorů z @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. Generování schématu
Rayfin CLI (npx rayfin) analyzuje vaše zdobené třídy a generuje:
- Schéma databáze – tabulky, sloupce, omezení a indexy
- Konfigurace rozhraní API – definice koncových bodů GraphQL
- Zásady oprávnění – zabezpečení na úrovni řádků a řízení přístupu na úrovni polí
4. Použití klienta bezpečného typu
Rozhraní GraphQL API jsou k dispozici pro provádění operací CRUD ve vaší databázi. Sada Rayfin SDK poskytuje operaci datového klienta za účelem čtení nebo zápisu nebo odstranění dat.
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();
Reference dekorátorů
Sada Rayfin SDK poskytuje dekorátory pro běžné vzory modelování dat:
Dekorátory entit
| Dekoratér | Purpose | Example |
|---|---|---|
@entity() |
Označení třídy jako databázové entity | @entity() class Product |
Dekorátory vlastností
| Dekoratér | Typ databáze | typ TypeScriptu |
|---|---|---|
@uuid() |
UNIQUEIDENTIFIER | string |
@text() |
NVARCHAR | string |
@int() |
INT | number |
@decimal() |
DESETINNÉ ČÍSLO | number |
@bool() |
BIT | boolean |
@date() |
DATETIME2 | Date |
Dekorátory oprávnění
| Dekoratér | Purpose |
|---|---|
@role() |
Definování oprávnění založených na rolích |
Podrobnosti o autorizaci najdete v tématu Definování oprávnění k datům .
Functions
Vytvořte jednu UserDataFunctions instanci a zaregistrujte každou funkci voláním udf.func(name, handler, connections?).
Při definování funkce postupujte podle těchto pravidel:
- Umístěte
RayfinContextparametr kamkoli do podpisu handleru. Runtime jej identifikuje podle typu, vkládá a vylučuje z generovaných vstupů funkcí. - Deklarujte spojení pro každý delegovaný token, který funkce potřebuje. Vynechte pole spojení pro funkce, které přistupují pouze k datům aplikací nebo nepotřebují delegované tokeny.
Následující příklad registruje obyčejnou funkci a funkci, která využívá kontext vyvolání:
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';
},
);
RayfinContext poskytuje služby modulu runtime pro funkci:
| Člen | Purpose |
|---|---|
ctx.accessToken |
Poskytuje přihlášenému uživateli Rayfin JSON Web Token (JWT). Dekódujte atribut sub, abyste získali stabilní uživatelské ID. |
ctx.Tokens.<Audience> |
Získá platformou poskytnutý token zdroje pro publikum deklarované v RayfinContext anotaci. Nasazené funkce využívají identitu aplikace a její oprávnění. Podrobnosti viz Připojit funkce k externím zdrojům. |
ctx.getSecret('NAME') |
Získá tajemství pro aktuální invokaci. Vrací undefined, když tajný klíč není nastaven. |
ctx.getDataClient() |
Získá API pro typovaná data pro vaše entity. Klient podporuje operace vytváření, findManyaktualizace, mazání a upsertování. |
ctx.baseUrl |
Poskytuje Rayfin endpoint pro aktuální položku. |
ctx.publishableKey |
Poskytuje publikovatelný klíč pro aktuální položku. |
Pro pokyn k nastavení, lokálnímu ladění a nasazení viz Funkce použití ve Fabric Apps.
Pracovní postup vývoje
Typický vývojový cyklus se řídí tímto vzorem:
- Definování nebo úprava datových modelů – Přidání nebo aktualizace tříd TypeScriptu pomocí dekorátorů
-
Testujte místně pomocí vzdáleného back-endu – Spuštěním příkazu
npm run devotestujte změny kódu front-endu v back-endu vaší aplikace v Fabric. -
Deploy to Fabric – Spusťte
npx rayfin up, chcete-li nasadit do spravované služby Fabric a použít změny schématu.
Změny ve vašich modelech TypeScript se automaticky promítnou do celého stacku – od schématu databáze přes koncové body API až po klientské typy.
Authorization
Oprávnění se definují společně s datovými modely pomocí dekorátoru @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;
}
Tento přístup zajišťuje:
- Bezpečnostní pravidla jsou přímo u dat, která chrání
- Typově bezpečné výrazy zásad zachycují chyby při kompilaci.
- Při refaktoringu polí v entitě se automaticky aktualizují kontroly oprávnění.