A programozási modell áttekintése

A Rayfin SDK egy dekoratőralapú programozási modellt használ, amelyben az adatsémát egyszer adja meg TypeScriptben, és automatikusan fogad éles használatra kész API-kat, típusbiztos ügyfeleket és infrastruktúrát.

főbb fogalmak

A Rayfin SDK három alapvető elemet egyesít:

  • Dekoratőr-alapú séma: TypeScript-dekorátorok használatával definiálhat adatmodelleket, engedélyeket és kapcsolatokat.
  • Automatikus API-létrehozás: A kitüntetett osztályok GraphQL-végpontokká válnak vezérlőkód írása nélkül.
  • Típusbiztos ügyfelek: A létrehozott TypeScript-ügyfelek fordítási idejű ellenőrzést biztosítanak a lekérdezésekhez és a mutációkhoz.

Hogyan működik?

Fabric-alkalmazás létrehozásakor a kód az alábbi szakaszokon halad végig:

# Stage Mi történik?
1 fejlesztő Az alkalmazást a választott szerkesztőben szerkesztheti.
2 TypeScript Entitásosztályokat ír a TypeScriptben.
3 Decorators Az osztályokat és mezőket a(z) @entity, @uuid, @text, @role és más dekorátorok használatával annotálhatja.
4 Schema A parancssori felület a kitüntetett osztályokat adatbázisséma, engedélyszabályzatok és API-konfigurációkká állítja össze.
5 API-k A séma GraphQL-végpontként van közzétéve.
6 Client A generált RayfinClient egy típusbiztos adat- és hitelesítési klienst tesz elérhetővé ezeken a végpontokon keresztül.
7 Application A frontendalkalmazás a klienst használja az adatok olvasására és írására.

1. Adatmodellek definiálása dekorátorokkal

Az adatstruktúrát TypeScript-osztályokkal és dekorátorokkal határozhatja meg a következőből @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. Séma létrehozása

A Rayfin CLI (npx rayfin) elemzi a dekorált osztályokat, és a következőket hozza létre:

  • Adatbázisséma – Táblák, oszlopok, korlátozások és indexek
  • API-konfiguráció – GraphQL-végpontdefiníciók
  • Engedélyszabályzatok – Sorszintű biztonság és mezőszintű hozzáférés-vezérlés

4. A típusbiztos kliens használata

A GraphQL API-k a CRUD-műveletek adatbázison való végrehajtásához érhetők el. A Rayfin SDK egy adatügyfél-műveletet biztosít a dobozon kívül az adatok olvasásához vagy írásához vagy törléséhez.

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();

Dekorátor referenciája

A Rayfin SDK dekorátorokat biztosít a gyakori adatmodellezési mintákhoz:

Entitás-dekorátorok

Lakberendező Alkalmazás célja Example
@entity() Osztály megjelölése adatbázis-entitásként @entity() class Product

Ingatlan dekorátorok

Lakberendező Adatbázis típusa TypeScript-típus
@uuid() UNIQUEIDENTIFIER string
@text() NVARCHAR string
@int() INT number
@decimal() TIZEDES number
@bool() BIT boolean
@date() DATETIME2 Date

Jogosultságdekorátorok

Lakberendező Alkalmazás célja
@role() Szerepköralapú engedélyek definiálása

Lásd: Adatengedélyek meghatározása az engedélyezési adatokhoz.

Fejlesztési munkafolyamat

Egy tipikus fejlesztési ciklus a következő mintát követi:

  1. Adatmodellek definiálása vagy módosítása – TypeScript-osztályok hozzáadása vagy frissítése dekorátorokkal
  2. Helyi tesztelés távoli háttérrendszerrel - A npm run dev futtatásával tesztelheti a frontendkód módosításait a Fabricben található alkalmazás-háttérrendszerrel.
  3. Deploy to Fabric – Futtassa a npx rayfin up parancsot a felügyelt Fabric szolgáltatásban való üzembe helyezéshez, és alkalmazza a séma módosításait.

A TypeScript-modellek módosításai automatikusan végigterjednek a teljes technológiai rétegen — az adatbázissémától az API-végpontokon át a kliensoldali típusokig.

Authorization

A jogosultságok az adatmodellek mellett, a @role dekorátorral vannak definiálva:

@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;
}

Ez a megközelítés a következőket biztosítja:

  • A biztonsági szabályok közvetlenül az általuk védett adatok mellett vannak.
  • A típusbiztos szabályzatkifejezések fordítási időben kiszűrik a hibákat
  • Az entitásmezők újrabontása automatikusan frissíti az engedélyellenőrzéseket