Programlama modeline genel bakış

Rayfin SDK, veri şemanızı TypeScript'te bir kez tanımladığınız ve üretime hazır API'leri, tür güvenli istemcileri ve altyapıyı otomatik olarak elde ettiğiniz dekoratör temelli bir programlama modeli kullanır.

Temel kavramlar

Rayfin SDK üç temel öğeyi birleştirir:

  • Dekoratör temelli şema: Veri modellerini, izinleri ve ilişkileri tanımlamak için TypeScript dekoratörlerini kullanın.
  • Otomatik API oluşturma: Dekore edilmiş sınıflarınız denetleyici kodu yazmadan GraphQL uç noktalarına dönüşür.
  • Tür açısından güvenli istemciler: Oluşturulan TypeScript istemcileri, sorgular ve mutasyonlar için derleme süresi doğrulaması sağlar.

Nasıl çalışır?

bir Fabric uygulaması oluşturduğunuzda kodunuz şu aşamalarda akar:

# Stage Ne olur?
1 Developer Uygulamayı istediğiniz düzenleyicide yazarsınız.
2 TypeScript TypeScript'te varlık sınıfları yazarsınız.
3 Decorators Sınıflara ve alanlara @entity, @uuid, @text, @role ve diğer dekoratörlerle not eklersiniz.
4 Schema CLI, dekore edilmiş sınıfları bir veritabanı şeması, izin ilkeleri ve API yapılandırmasında derler.
5 APIs Şema GraphQL uç noktaları olarak yayımlanır.
6 Client Oluşturulan, RayfinClient bu uç noktalar üzerinde tür açısından güvenli bir veri ve kimlik doğrulaması istemcisi sunar.
7 Application Ön uç uygulamanız verileri okumak ve yazmak için istemciyi tüketir.

1. Dekoratörlerle veri modelleri tanımlama

Veri yapınızı typescript sınıflarını ve dekoratörlerini @microsoft/rayfin-corekullanarak tanımlarsınız:

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. Şema oluşturma

Rayfin CLI (npx rayfin) dekore edilmiş sınıflarınızı analiz eder ve aşağıdakini oluşturur:

  • Veritabanı şeması - Tablolar, sütunlar, kısıtlamalar ve dizinler
  • API yapılandırması - GraphQL uç nokta tanımları
  • İzin ilkeleri - Satır düzeyi güvenlik ve alan düzeyinde erişim denetimi

4. Tür açısından güvenli istemci kullanımı

GraphQL API'leri veritabanınızda CRUD işlemleri gerçekleştirmek için kullanılabilir. Rayfin SDK, verileri okumak, yazmak veya silmek için kullanıma hazır bir veri istemcisi işlemi sağlar.

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

Dekoratör referansı

Rayfin SDK ortak veri modelleme desenleri için dekoratörler sağlar:

Varlık dekoratörleri

Dekoratör Purpose Example
@entity() Sınıfı veritabanı varlığı olarak işaretleme @entity() class Product

Özellik dekoratörleri

Dekoratör Veritabanı türü TypeScript türü
@uuid() UNIQUEIDENTIFIER string
@text() NVARCHAR string
@int() INT number
@decimal() ONDALIK number
@bool() BIT boolean
@date() DATETIME2 Date

İzin dekoratörleri

Dekoratör Purpose
@role() Rol tabanlı izinleri tanımlama

Yetkilendirme ayrıntıları için bkz. Veri izinlerini tanımlama .

Geliştirme iş akışı

Tipik bir geliştirme döngüsü şu deseni izler:

  1. Veri modellerini tanımlama veya değiştirme - TypeScript sınıflarını dekoratörlerle ekleme veya güncelleştirme
  2. Uzak arka uçla yerel olarak test edin - ön uç kod değişikliklerinizi Fabric uygulama arka ucunuzda test etmek için npm run dev çalıştırın.
  3. deploy to Fabric - Yönetilen Fabric hizmetine dağıtmak için npx rayfin up çalıştırın ve şema değişikliklerinizi uygular.

TypeScript modellerinizdeki değişiklikler, veritabanı şemasından API uç noktalarına ve istemci türlerine kadar yığının tamamına otomatik olarak yayılır.

Authorization

İzinler, dekoratör kullanılarak @role veri modellerinizle birlikte tanımlanır:

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

Bu yaklaşım şunu sağlar:

  • Güvenlik kuralları, korudukları verilerin hemen yanında bulunur
  • Tür açısından güvenli ilke ifadeleri derleme zamanında hataları yakalar
  • Varlık alanlarını yeniden düzenleme izin denetimlerini otomatik olarak güncelleştirir