Ir al contenido

Bases de datos

Endpoints de Bases de datos (Waiify DB): tablas propias con columnas tipadas para inventarios, catálogos y cualquier dato estructurado de tu negocio. Todos cuelgan de /workspaces/:workspaceId/databases y requieren autenticación.

MétodoRutaDescripción
GET/databasesListar bases de datos
POST/databasesCrear base de datos
GET/databases/:dbIdObtener base de datos
PATCH/databases/:dbIdActualizar base de datos
DELETE/databases/:dbIdEliminar base de datos
MétodoRutaDescripción
GET/databases/:dbId/tablesListar tablas de una base
POST/databases/:dbId/tablesCrear tabla (opcionalmente con sus columnas)
GET/databases/:dbId/tables/:tableIdObtener tabla (con sus columnas)
PATCH/databases/:dbId/tables/:tableIdActualizar tabla (nombre visible y descripción)
DELETE/databases/:dbId/tables/:tableIdEliminar tabla
MétodoRutaDescripción
POST/databases/:dbId/tables/:tableId/columnsCrear columna
PATCH/databases/:dbId/tables/:tableId/columns/:colIdActualizar columna
DELETE/databases/:dbId/tables/:tableId/columns/:colIdEliminar columna
MétodoRutaDescripción
GET/databases/:dbId/tables/:tableId/rowsListar filas (con búsqueda, filtros y orden)
POST/databases/:dbId/tables/:tableId/rowsCrear fila
GET/databases/:dbId/tables/:tableId/rows/:rowIdObtener fila
PATCH/databases/:dbId/tables/:tableId/rows/:rowIdActualizar fila (merge parcial)
DELETE/databases/:dbId/tables/:tableId/rows/:rowIdEliminar fila (borrado lógico)
POST/databases/:dbId/tables/:tableId/rows/queryOperación sobre filas: upsert, aggregate o deleteMany
POST/databases/:dbId/tables/:tableId/importImportar filas en lote

POST /workspaces/:workspaceId/databases
CampoTipoRequeridoDescripción
namestringNombre de la base de datos.
descriptionstringNoDescripción.
driverstringNoSolo admite "waiify-pg" (por defecto).
colorstringNoColor para identificarla en la biblioteca.
iconstringNoIcono asociado.
POST /workspaces/:workspaceId/databases/:dbId/tables
CampoTipoRequeridoDescripción
namestringIdentificador interno de la tabla (empieza con letra; letras, números y guion bajo). Único dentro de la base.
displayNamestringNombre visible.
descriptionstringNoDescripción.
columnsarrayNoColumnas iniciales (mismo formato que crear columna). Una tabla admite hasta 50 columnas.
POST /workspaces/:workspaceId/databases/:dbId/tables/:tableId/columns
CampoTipoRequeridoDescripción
keystringIdentificador interno (empieza con letra; letras, números y guion bajo). Único dentro de la tabla.
displayNamestringNombre visible.
typestringUno de: text, longText, number, currency, boolean, date, datetime, select, multi_select, email, phone, url, json, reference.
requiredbooleanNoPor defecto false.
uniquebooleanNoPor defecto false.
indexedbooleanNoPor defecto false.
defaultValueanyNoValor por defecto al crear una fila sin ese campo.
optionsobjectNoDepende del tipo: choices (arreglo de strings, para select/multi_select), precision (decimales, para number/currency), refTableId + refColumnKey (para reference).
GET /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows
ParámetroTipoDescripción
searchstringBúsqueda libre sobre los valores de la fila. Se combina en AND con filter.
filterstring (JSON)Filtro estructurado — ver formato abajo.
sortstring (JSON)Arreglo de orden — ver formato abajo.
pagenumberPágina, empieza en 1.
pageSizenumberFilas por página. Por defecto 50, tope 1000.

filter es un JSON con esta forma (hasta 50 condiciones):

Formato de filter
{
"combinator": "and",
"conditions": [
{ "column": "categoria", "operator": "eq", "value": "Electrónica" },
{ "column": "stock", "operator": "gt", "value": 0 }
]
}

Operadores disponibles: eq, ne, gt, gte, lt, lte, contains, startsWith, endsWith, isEmpty, isNotEmpty, in.

sort es un arreglo de { "column": "...", "direction": "asc" | "desc" }.

GET /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows/:rowId
POST /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows
CampoTipoRequeridoDescripción
dataobjectPar columna: valor para cada campo. Los campos omitidos toman el defaultValue de su columna cuando existe; las columnas required sin valor ni default rechazan la petición.
PATCH /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows/:rowId
CampoTipoRequeridoDescripción
dataobjectPar columna: valor a actualizar. Es un merge parcial: las columnas que no envíes conservan su valor actual.
DELETE /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows/:rowId

Es un borrado lógico (deletedAt): la fila deja de aparecer en listados y lecturas, pero no se destruye físicamente.

Operación sobre filas — upsert, aggregate y deleteMany

Sección titulada «Operación sobre filas — upsert, aggregate y deleteMany»
POST /workspaces/:workspaceId/databases/:dbId/tables/:tableId/rows/query

Un único endpoint para tres operaciones que no encajan en el CRUD simple, seleccionadas por operation.

CampoTipoRequeridoDescripción
operationstringupsert, aggregate o deleteMany.
matchColumnstringSolo upsertColumna usada para buscar la fila existente.
dataobjectSolo upsertDatos a insertar o mezclar.
aggregateOpstringNo (solo aggregate)count (por defecto), sum, avg, min o max.
columnstringSolo aggregate si aggregateOpcountColumna numérica sobre la que agregar.
filterobjectNoMismo formato que en listar filas. Aplica a aggregate y deleteMany.
POST /workspaces/:workspaceId/databases/:dbId/tables/:tableId/import

Inserta varias filas en un solo lote. A diferencia de crear fila, aquí la validación es estricta: cada fila del lote debe cumplir todas las columnas requeridas (no se aplican valores por defecto salvo los que ya tenga la columna). Las filas que fallan no detienen el import — se reportan en errors y el resto se inserta igual.

CampoTipoRequeridoDescripción
rowsarray de objetosCada elemento es un par columna: valor, con la misma forma que data en crear fila pero sin el envoltorio.