Estamos desarrollando una API REST que, entre otras, será consumida por una interfaz HTML5 a través de JavaScript. La aplicación es para uso dentro de la organización y generalmente tiene alrededor de 300 usuarios, pero queremos escalar bien hasta 1000 usuarios más o menos.
Normalmente, las conexiones a la API se realizarán dentro de la LAN, por lo que la calidad y la latencia de la conexión serán buenas, aunque no se excluye el uso ocasional en Internet, donde las conexiones podrían ser más lentas y con más retraso a través de 3G / 4G.
Las dos opciones que pensamos son:
El frontend realizará varias llamadas asincrónicas simultáneas a la API para cargar los diversos componentes de la interfaz.
- Pros: simplicidad.
- Contras: Más conexiones al servidor.
El controlador de la interfaz hará una sola llamada a la API pasando como parámetros qué objetos deben recuperarse.
- Pros: solo una conexión al servidor, aunque el servidor hará varias conexiones a la base de datos.
- Contras: Requiere mecanismos tanto en frontend como en API. Se complica el diseño.
Explicaciones adicionales: Habrá diferentes recursos ... / Producto ... / Ubicaciones, etc. Estos recursos podrían recuperarse solos, pero habrá otro recurso abstracto ... / pantalla? Producto y ubicaciones que obtendrán ambos en una sola llamada.
/screen?Product&Locations
es un mal enfoque, al menos con toda la experiencia que tengo desarrollando API REST y una aplicación web que los utilizó. Desde una perspectiva monolítica pura (por ejemplo, en Ruby on Rails), tener una ruta/screen
que cargue ambosProduct
yLocation
recursos está perfectamente bien. Sin embargo, desde una perspectiva REST , nunca querrás que una ruta cargue más de una (a menos que estés uniendo tablas para obtener más datos a la vez). Lo que/screen
debe hacer es cargar una página básica diseño y AJAX su API para obtener los datos (Product
,Location
, etc.)./screen
se AjaxHTTP GET
a/products/popular
e/locations
). Su API no debería ser la que realiza múltiples cargas, porque es poco probable que muestre los datos de la misma manera en una aplicación web frente a Android, por ejemplo.