Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Rayfin SDK utiliza um modelo de programação baseado em decoradores, no qual define o seu esquema de dados uma única vez em TypeScript e recebe automaticamente APIs prontas para produção, clientes com segurança de tipos e infraestrutura.
Conceitos-chave
O Rayfin SDK combina três elementos fundamentais:
- Esquema orientado por decoradores: Use decoradores TypeScript para definir modelos de dados, permissões e relações.
- Geração automática de API: As suas classes decoradas tornam-se endpoints GraphQL sem escrever código controlador.
- Clientes seguros para tipos: Os clientes TypeScript gerados fornecem validação em tempo de compilação para consultas e mutações.
Como funciona
Quando cria uma aplicação Fabric, o seu código passa por estas fases:
| # | Stage | O que acontece |
|---|---|---|
| 1 | Desenvolvedor | Tu crias a aplicação no editor que escolheres. |
| 2 | TypeScript | Escreves classes de entidade em TypeScript. |
| 3 | Decorators | Anotas classes e campos com @entity, @uuid, @text, @role e outros decoradores. |
| 4 | Schema | A CLI compila as classes decoradas num esquema de base de dados, políticas de permissões e configuração da API. |
| 5 | APIs | O esquema é disponibilizado como endpoints GraphQL. |
| 6 | Client | O RayfinClient gerado expõe um cliente de dados e autenticação com segurança de tipos para esses endpoints. |
| 7 | Application | A sua aplicação frontend consome o cliente para ler e escrever dados. |
1. Definir modelos de dados com decoradores
Define a sua estrutura de dados usando classes TypeScript e decoradores a partir de @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. Geração de esquemas
A CLI do Rayfin (npx rayfin) analisa as suas classes decoradas e gera:
- Esquema de base de dados - Tabelas, colunas, restrições e índices
- Configuração da API - Definições de pontos de extremidade GraphQL
- Políticas de permissões - Segurança ao nível de linha e controlo de acesso ao nível de campo
4. Utilização de cliente com segurança de tipos
As APIs GraphQL estão disponíveis para realizar operações CRUD na sua base de dados. O SDK Rayfin fornece uma operação cliente de dados pronta a usar para ler, escrever ou eliminar dados.
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();
Referência do decorador
O Rayfin SDK fornece decoradores para padrões comuns de modelação de dados:
Decoradores de entidades
| Decorador | Purpose | Example |
|---|---|---|
@entity() |
Marque uma classe como entidade de base de dados | @entity() class Product |
Decoradores de propriedades
| Decorador | Tipo de base de dados | Tipo TypeScript |
|---|---|---|
@uuid() |
UNIQUEIDENTIFIER | string |
@text() |
NVARCHAR | string |
@int() |
INT | number |
@decimal() |
DECIMAL | number |
@bool() |
BIT | boolean |
@date() |
DATETIME2 | Date |
Decoradores de permissão
| Decorador | Purpose |
|---|---|
@role() |
Definir permissões com base em funções |
Consulte Definir permissões de dados para detalhes de autorização.
Fluxo de trabalho de desenvolvimento
Um ciclo típico de desenvolvimento segue este padrão:
- Definir ou modificar modelos de dados - Adicionar ou atualizar classes TypeScript com decoradores
-
Testa localmente com backend remoto - Executa o
npm run devpara testar as alterações no código do teu frontend com o backend da tua App no Fabric. -
Implementar no Fabric - Execute
npx rayfin uppara implementar no serviço gerido do Fabric e aplique as alterações ao esquema.
As alterações aos seus modelos TypeScript refletem-se automaticamente em toda a stack — desde o esquema da base de dados até aos endpoints da API e aos tipos do cliente.
Authorization
As permissões são definidas juntamente com os seus modelos de dados usando o @role decorador:
@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;
}
Esta abordagem garante:
- As regras de segurança estão ao lado dos dados que protegem
- Expressões de políticas seguras por tipos detetam erros em tempo de compilação
- A refatorização dos campos da entidade atualiza automaticamente as verificações de permissão