Pular para o conteúdo

Visão Geral do Backend

O backend Rebase é um servidor Node.js construído sobre Hono que oferece:

  • API REST — Endpoints CRUD auto-gerados para cada coleção
  • Autenticação — Tokens JWT, Google OAuth, gestão de utilizadores/funções
  • Armazenamento — Upload/download de ficheiros com sistema de ficheiros local ou S3
  • WebSocket — Sincronização de dados em tempo real via PostgreSQL LISTEN/NOTIFY
  • Histórico de Entidades — Trilha de auditoria para cada alteração de dados
  • Ramificação de Base de Dados — Cópias de base de dados instantâneas e isoladas para dev/staging/testes
  • Tarefas Cron — Tarefas em segundo plano agendadas com painel de monitorização

Tudo é inicializado com uma única função:

import { initializeRebaseBackend } from "@rebasepro/server-core";
import { createPostgresAdapter } from "@rebasepro/server-postgresql";
import { env } from "./env";
const instance = await initializeRebaseBackend({
app,
server,
collectionsDir: "./config/collections",
database: createPostgresAdapter({
connection: db,
schema: { tables, enums, relations }
}),
auth: {
jwtSecret: env.JWT_SECRET,
},
storage: { type: "local", basePath: "./uploads" },
history: true,
enableSwagger: env.NODE_ENV !== "production"
});

Após a inicialização, estas rotas são montadas:

CaminhoPropósito
/api/auth/*Autenticação (registo, login, refresh, Google OAuth)
/api/admin/*Gestão de utilizadores e funções (apenas para administradores)
/api/storage/*Upload, download e eliminação de ficheiros
/api/data/collectionsEndpoint de metadados de coleção
/api/data/:slugOperações CRUD por coleção (GET, POST, PUT, DELETE)
/api/data/:slug/:id/historyHistórico de alterações de entidade (quando ativado)
/api/data/docsEspecificação OpenAPI (quando enableSwagger: true)
/api/data/swaggerSwagger UI (modo de desenvolvimento, quando enableSwagger: true)
/api/functions/*Rotas de funções personalizadas (quando functionsDir está definido)
/api/cron/*Gestão de tarefas cron (apenas para administradores, quando cronsDir está definido)
WebSocket on upgradeSubscrições em tempo real
interface RebaseBackendConfig {
// HTTP framework
app: Hono; // Hono application instance
server: Server; // Node.js HTTP server (for WebSocket attachment)
basePath?: string; // Route prefix (default: "/api")
// Collections
collections?: EntityCollection[]; // Your collection definitions
collectionsDir?: string; // Auto-load collections from a directory
// Bootstrappers (Databases, Auth, Realtime, etc.)
bootstrappers: BackendBootstrapper[];
// Authentication
auth?: AuthConfig;
// File storage
storage?: BackendStorageConfig | Record<string, BackendStorageConfig>;
// Entity history
history?: boolean | HistoryConfig;
// OpenAPI/Swagger
enableSwagger?: boolean;
// Custom API endpoints
functionsDir?: string; // Auto-load Hono routes from a directory
// Scheduled tasks
cronsDir?: string; // Auto-load cron jobs from a directory
// Logging
logging?: { level?: "error" | "warn" | "info" | "debug" };
}

initializeRebaseBackend retorna uma RebaseBackendInstance com acesso a serviços internos:

const instance = await initializeRebaseBackend(config);
// Internal service access
instance.driver // Default data driver
instance.driverRegistry // All drivers (for multi-database)
instance.realtimeService // Default realtime service
instance.userService // User management
instance.roleService // Role management
instance.storageController // Default storage
instance.storageRegistry // All storage backends
instance.collectionRegistry // Collection metadata
instance.historyService // Entity history
instance.cronScheduler // Cron job scheduler (when cronsDir is set)

Nota: Embora a instância exponha estes serviços internos, o código da aplicação (como funções personalizadas e tarefas cron) deve usar o singleton global rebase de @rebasepro/server-core para interagir com a API do backend.

A API REST é auto-gerada a partir das suas coleções. Cada coleção obtém estes endpoints:

MétodoCaminhoDescrição
GET/api/data/:slugListar entidades (com filtro, ordenação, limite, pesquisa)
GET/api/data/:slug/:idObter uma única entidade
POST/api/data/:slugCriar uma nova entidade
PUT/api/data/:slug/:idAtualizar uma entidade
DELETE/api/data/:slug/:idEliminar uma entidade
ParâmetroDescriçãoExemplo
filterCondições de filtro codificadas em JSON?filter={"active":["==",true]}
orderByCampo de ordenação?orderBy=created_at
orderDireção de ordenação?order=desc
limitTamanho da página?limit=25
startAfterCursor para paginação?startAfter=encodedCursor
searchPesquisa de texto completo?search=laptop

O servidor WebSocket anexa-se ao mesmo servidor HTTP e fornece subscrições em tempo real:

  • Subscrever alterações de coleção — ser notificado quando qualquer entidade numa coleção é criada, atualizada ou eliminada
  • Subscrever alterações de entidade — ser notificado quando uma entidade específica muda
  • Tratamento automático de reconexão no SDK do cliente

O backend usa internamente PostgreSQL LISTEN/NOTIFY. Para implementações de múltiplas instâncias, forneça uma connectionString no seu PostgresBootstrapper para ativar a difusão entre instâncias.

O backend inclui um manipulador de erros que captura todas as exceções e retorna respostas de erro estruturadas:

{
"error": {
"message": "Entity not found",
"code": "not-found",
"status": 404
}
}

Se a inicialização falhar (por exemplo, erro de conexão à base de dados), o servidor ainda inicia, mas retorna 503 para todos os pedidos da API, com uma mensagem de erro descritiva nos logs.