MYSQL 9.X INCORPORA UN SERVICIO REST NATIVO: APIS DIRECTAMENTE DESDE LA BASE DE DATOS
MySQL 9.x trae una novedad importante para los desarrolladores: un servicio REST integrado gracias a un plugin de servidor HTTP. Esto permite exponer los datos de la base de datos mediante APIs REST sin necesidad de escribir código backend en NodeJS, PHP, Laravel u otros frameworks para las operaciones más sencillas.Este plugin de servidor HTTP que convierte la propia base de datos en un endpoint REST. Se pueden enviar peticiones HTTP, GET, POST, PUT, PATCH, DELETE, directamente a MySQL y recibir o enviar datos en formato JSON. Ya no es obligatorio montar una capa intermedia solo para operaciones CRUD básicas.
Cómo funciona
El flujo es muy sencillo:- Una aplicación móvil o una aplicación web/frontend envía una petición HTTP, GET, POST, PUT, PATCH, DELETE.
- La petición llega al REST Service que se ejecuta dentro de MySQL (HTTP Server Plugin).
- MySQL procesa la operación y devuelve una respuesta JSON
Ejemplo
{
"id": 1,
"name": "Product",
"price": 99.99
}
Impacto en el desarrollo backend
Para tareas simples como consultar o actualizar datos, se puede saltar el intermediario y trabajar directamente con MySQL mediante peticiones HTTP. Las principales ventajas son:- Super rápido: sin capas extra ni procesamiento intermedio.
- Más simple: no hace falta PHP, Laravel o Node.js para operaciones básicas.
- Acceso directo: trabajas con los datos tal cual están en MySQL.
- Ideal para CRUD: perfecto para APIs sencillas y herramientas internas.
¿Cuándo tiene sentido usarlo?
Es especialmente útil para:- Prototipos y MVPs rápidos.
- APIs internas o herramientas de administración.
- Aplicaciones móviles o frontends que solo necesitan operaciones CRUD sencillas.
- Reducir la complejidad de la arquitectura en proyectos pequeños o medianos.
Ejemplo
Preparación de la base de datos
CREATE DATABASE tienda;
USE tienda;
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0
);
INSERT INTO productos (nombre, precio, stock) VALUES
('Teclado Mecánico', 89.99, 25),
('Ratón Inalámbrico', 29.50, 40),
('Monitor 27"', 249.00, 12);
Instalar el componente REST (MySQL 9.x labs / versiones con el componente)
Ejecutar dentro de la consola MySQL:INSTALL COMPONENT "file://component_mysql_rest_service";
INSTALL COMPONENT "file://component_mysql_rest_service"
SET GLOBAL component_mysql_rest_service.http_port = 33060;
Configurar el servicio REST (con MySQL Shell o SQL REST)
-- Configurar el metadata del REST Service
CONFIGURE REST METADATA;
-- Crear el servicio
CREATE OR REPLACE REST SERVICE /api
COMMENT "API de la tienda";
USE REST SERVICE /api;
-- Añadir el esquema
CREATE REST SCHEMA /tienda FROM `tienda`;
USE REST SCHEMA /tienda;
-- Exponer la tabla como endpoint REST (con todas las operaciones CRUD)
CREATE OR REPLACE REST VIEW /productos
AS `tienda`.`productos` {
id: id @SORTABLE @KEY,
nombre: nombre,
precio: precio,
stock: stock
}
@INSERT @UPDATE @DELETE
AUTHENTICATION NOT REQUIRED; -- Solo para pruebas (en producción pon AUTHENTICATION REQUIRED)
Probar la API con curl
Asumiendo que el servicio escucha en "https://localhost:33060", o el puerto configurado.//Obtener todos los productos (GET)bash
curl -k https://localhost:33060/api/tienda/productos
//RESPUESTA
{
"items": [
{
"id": 1,
"nombre": "Teclado Mecánico",
"precio": 89.99,
"stock": 25,
"links": [
{ "rel": "self", "href": "/api/tienda/productos/1" }
]
},
...
]
}