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
}
No hace falta código backend adicional para estos casos.

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.
Para lógica de negocio compleja, validaciones avanzadas, autenticación elaborada o reglas de seguridad muy específicas, sigue siendo recomendable mantener una capa de aplicación tradicional.

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";
En algunas versiones se puede indicar el puerto:

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" }
      ]
    },
    ...
  ]
}