---
title: "Conectando Lemmid Store con cocinas"
date: 2020-06-12
language: es
topics: ["data", "design", "lemmid-store", "networking", "programming", "server", "work"]
source_url: https://willem.com/es/2020-06-12_conectando-lemmid-store-con-cocinas/
---
# Conectando Lemmid Store con cocinas

*Cómo integrarse con sistemas externos que no controlas*

> Para la app de pedidos de comida que estoy desarrollando, necesitaba diseñar una forma fiable de conectarla con sistemas externos. Esos sistemas escapan a mi control directo e incluyen distintas cajas registradoras, sistemas de gestión de cocina e impresoras de tickets. Sigue leyendo para saber más sobre cómo diseñar para lo desconocido y poco fiable.

## App para pedir comida

La app que estoy desarrollando es Lemmid_Store (https://lemmid-store.com), una app fácil de usar con la que la gente puede hacer (y pagar) pedidos de comida para llevar. Aquí tienes todos_los_artículos_sobre_Lemmid_Store (https://willem.com/blog/lemmid-store/).

![Lemmid Store: una app para pedir comida para llevar](https://willem.com/global/images/e4dce3b523ff.webp)

## Sistemas externos

La necesidad de conectar con sistemas externos viene del deseo de integrar la app de pedidos en los procesos de negocio del servicio de reparto de comida. Piensa en cosas como:

- volcar los datos de los pedidos en registros administrativos (por ejemplo, la contabilidad)

- enviar los pedidos a las cocinas, donde se preparan y se empaquetan las comidas

- dar acceso fácil a la información de ruta, que muestra adónde hay que llevar la comida

- programar los pedidos que son para entregar más tarde

![Ticket impreso a través de una conexión externa, con datos detallados del pedido como los modificadores de producto (las elecciones del cliente en cada producto)](https://willem.com/global/images/2c395cf2f419.webp)

### Los retos de conectar con sistemas externos

Quizá no te lo imagines, pero conectar con sistemas externos puede ser complicado. Si piensas en la app de pedidos como una especie de "motor" (como el de tu coche), lo que quieres es acoplar ese motor a piezas externas. Como puedes imaginar, no todas las piezas caben igual de bien bajo el capó, por así decirlo. Y para complicarlo aún más: no sabes con certeza lo fiables que son esas piezas externas. Tienes que diseñar la integración de modo que sea fácil conectar piezas externas distintas y que el rendimiento no dependa de lo fiables que sean.

![Integrar sistemas externos en tu app es como montar piezas de terceros en un motor: hay que pensar bien en si encajan y en lo fiables que son (imagen de un motor de combustión, dominio público)](https://willem.com/global/images/a1d4ad9cd8a3.webp)

Igual que con un motor de combustión, al integrar tu software con sistemas externos hay que tener en cuenta la compatibilidad y la fiabilidad. **No puedes dar por hecho que el software externo:**

- encaja a la perfección

- es siempre coherente

- está siempre disponible

- es de fiar

Para diseñar con esta visión bastante sombría de las conexiones externas, me pareció buena idea que el servidor backend principal de mi app de pedidos delegara la responsabilidad de conectar con sistemas externos en un 'servidor conector' hecho a propósito. El servidor conector se conecta entonces por su cuenta al sistema externo. Así, el servidor principal solo se comunica con piezas y sistemas 'propios', y se reducen los riesgos de incompatibilidad y de posibles caídas.

![Separar el servidor backend principal de los sistemas externos con un 'servidor conector' hecho a propósito](https://willem.com/global/images/2e9aca708f2b.webp)

En la práctica, esto significa que el 'servidor conector' es en realidad otra máquina, con su propio conjunto de software. Esta separación tiene varias ventajas importantes:

- **seguridad:** el servidor conector no guarda un registro completo de todos los pedidos; solo mantiene temporalmente en memoria los que hay que reenviar a un sistema externo. Un posible problema de seguridad en un sistema externo solo dejará expuesta una cantidad mínima de datos.

- **se adapta a todo:** el servidor conector admite muchos protocolos y formas de conectar con sistemas externos. Añadir una conexión es como si el servidor 'aprendiera un idioma nuevo'. Como ya es 'políglota', sumar un dialecto o un idioma suele ser fácil. Conectar con distintas API externas resulta más sencillo cuando ya tienes todas las piezas para (re)estructurar los datos.

- **absorbe la falta de fiabilidad:** un sencillo mecanismo de colas en el servidor conector le permite gestionar con elegancia las posibles caídas y los problemas de las conexiones externas. Al registrar y poner en cola por servicio externo, se puede reducir al mínimo el impacto en el resto de piezas y conexiones cuando un servicio se cae.

## Conclusión

Por tentador que sea añadir sin más piezas nuevas y vistosas a tu app, tienes que pensar bien la arquitectura para asegurarte de que funcione de forma fiable.

Diseñar software de servidor backend que se conecte con API externas es un reto. ¡Hay que esperar lo mejor, pero diseñar para lo peor!
