Sobes.tech
Senior

Cuente sobre el principio de Code-On-Demand.

sobes.tech AI

Respuesta de la IA

El principio de Code-On-Demand (Código bajo demanda) es uno de los estilos arquitectónicos opcionales de interacción en REST, donde el servidor puede ampliar temporalmente la funcionalidad del cliente enviándole código ejecutable.

Esto permite que el cliente sea más delgado, trasladando parte de la lógica al servidor, que se carga "bajo demanda" en caso de necesidad.

Ejemplos de uso:

  • JavaScript en aplicaciones web: El servidor envía código JavaScript al navegador, que se ejecuta en el lado del cliente para implementar interactividad, validación de datos, solicitudes asíncronas, etc.
  • Plugins y extensiones: El servidor puede proporcionar código para ampliar la funcionalidad de la aplicación o del cliente.

Ventajas:

  • Reducción del volumen de datos transmitidos: El código se envía solo cuando es necesario usarlo.
  • Flexibilidad: El servidor puede cambiar dinámicamente el comportamiento del cliente.
  • Cliente más delgado: El cliente no necesita implementar toda la funcionalidad posible de antemano.

Desventajas:

  • Complejidad en la implementación y seguridad: Se requiere un mecanismo para transmitir y ejecutar de forma segura el código en el lado del cliente.
  • Rendimiento: La carga y ejecución del código puede tomar tiempo.
// Ejemplo de Code-On-Demand en la web: el servidor envía JS para validar un formulario
// El servidor envía HTML con un formulario y un script
/*
<html>
<body>
  <form id="myForm">
    <input type="text" id="myInput">
    <button type="submit">Enviar</button>
  </form>

  <script src="/validate.js"></script> // El script se carga "bajo demanda"
</body>
</html>
*/

// Contenido de /validate.js
// Este código se ejecuta en el lado del cliente después de cargarlo
document.getElementById('myForm').addEventListener('submit', function(event) {
  const input = document.getElementById('myInput');
  if (input.value.trim() === '') {
    alert('¡El campo no puede estar vacío!');
    event.preventDefault(); // Cancela el envío del formulario
  }
});