La técnica Backend For Fronted (BFF) consiste en dedicar un componente backend por cada tipo de frontend para encapsular variaciones específicas en protocolos, flujos de trabajo o requisitos funcionales. A continuación, exploraremos los diferentes tipos de BFF y cómo pueden aplicarse para maximizar la eficiencia, flexibilidad y mantenibilidad de tu sistema.
¿Qué es un BFF?
Un BFF actúa como una capa de integración entre los frontends y los servicios principales del sistema. Esta arquitectura adapta el sistema a las necesidades específicas de cada frontend, además de facilitar protocolos personalizados, flujos de trabajo específicos y tecnologías optimizadas por frontend. También resuelve problemas comunes de coordinación y acoplamiento entre equipos que desarrollan múltiples interfaces.
Para más detalles puedes consultar el siguiente enlace:
Variantes de Backends for Frontends (BFF)
Los BFF pueden clasificarse en función del tipo de componente dedicado a cada escenario o frontend (Web, APP, etc):
1. Proxies
Los proxies son una variante de los Backends for Frontends (BFF) diseñada para gestionar las diferencias en protocolos, autorizaciones o cifrado entre distintos tipos de frontends. Su principal fortaleza es la capacidad de manejar estas variaciones sin modificar los flujos de trabajo subyacentes, lo que los convierte en una opción ideal cuando los frontend comparten una lógica de negocio común.
En esta arquitectura, cada equipo de frontend puede disponer de su propio proxy, adaptado específicamente a las necesidades de su frontend. Este proxy actúa como una capa intermedia entre el frontend y la API general del sistema, ajustando solicitudes y respuestas para garantizar compatibilidad y eficiencia.
Los proxies se caracterizan por ser livianos, centrándose exclusivamente en la adaptación de datos y protocolos sin agregar una lógica compleja o responsabilidades adicionales.
Imagina un sistema con aplicaciones móviles y web. Aunque ambas interactúan con los mismos servicios principales, podrían necesitar diferentes formatos de datos o manejar protocolos como REST en web y GraphQL en una APP. Aquí, un proxy específico para cada frontend puede encargarse de estas adaptaciones sin modificar el backend principal.
En resumen, los proxies son una solución eficiente y flexible para gestionar diferencias técnicas entre frontends, manteniendo la simplicidad en el diseño de la arquitectura general.
2. Orquestadores
Los orquestadores son una variante de los Backends for Frontends (BFF) que se utilizan cuando los frontends tienen flujos de trabajo completamente distintos. En lugar de simplemente adaptar solicitudes y respuestas como lo hacen los proxies, los orquestadores asumen la responsabilidad de coordinar múltiples servicios subyacentes para ofrecer una experiencia unificada y adaptada a las necesidades específicas de cada frontend.
Cada frontend tiene su propio backend dedicado, que contiene la lógica específica necesaria para su flujo de trabajo. Esto permite mantener una separación clara entre los distintos roles o tipos de usuarios, optimizando la interacción con el sistema.
Los orquestadores destacan por su capacidad para gestionar la complejidad de sistemas donde los frontend realizan tareas que no comparten mucho en común.
En un comercio electrónico, los consumidores y los administradores tienen flujos de trabajo completamente diferentes, los consumidores acceden a funciones como búsqueda de productos, pedidos y pagos. Los administradores gestionan el inventario, supervisan las estadísticas y procesan devoluciones.
Para gestionar estas diferencias, un orquestador dedicado para los consumidores puede coordinar servicios como productos, carrito de compras y pasarela de pago, mientras que otro orquestador para los administradores se enfoca en servicios de inventario y reportes.
En resumen, los orquestadores son ideales para sistemas donde la diversidad de flujos de trabajo requiere un backend especializado para garantizar eficiencia y claridad en el manejo de las operaciones de cada frontend.
3. Proxy + Orquestador
El enfoque de Proxy + Orquestador es ideal cuando los frontends varían tanto en el protocolo que utilizan como en los flujos de trabajo que requieren. Este modelo combina las capacidades de los proxies para gestionar aspectos técnicos, como protocolos y autorizaciones, con las de los orquestadores para manejar la lógica específica de los flujos de cada frontend.
Por un lado, los proxies se encargan de adaptar las solicitudes según el dispositivo o tipo de frontend, gestionando diferencias como REST, GraphQL o autenticación específica. Por otro lado, los orquestadores coordinan los servicios necesarios para ejecutar los flujos particulares de cada frontend, proporcionando una experiencia optimizada y coherente.
Un ejemplo práctico de este enfoque sería un sistema con múltiples dispositivos, como aplicaciones móviles y web, que tienen protocolos y requisitos técnicos distintos. Al mismo tiempo, estos dispositivos pueden atender a roles diferentes, como administradores o usuarios finales, cada uno con flujos únicos. En este caso, los proxies pueden manejar la diversidad técnica entre dispositivos, mientras que los orquestadores se encargan de los flujos específicos según el rol del usuario.
En resumen, Proxy + Orquestador es una solución versátil y eficiente para sistemas complejos, ya que permite abordar variaciones técnicas y de negocio de manera modular y escalable.
4. API Gateways
Los API Gateways son una solución práctica cuando se dispone de herramientas de terceros capaces de gestionar tanto las variaciones en protocolos como los flujos de trabajo entre diferentes frontends. En lugar de desarrollar un BFF personalizado, se aprovechan frameworks prediseñados que simplifican la integración y permiten manejar la diversidad de accesos de forma centralizada.
Estas herramientas se encargan de recibir solicitudes de varios frontends, adaptarlas según sea necesario y dirigirlas a los servicios correspondientes en el backend. Los API Gateways son especialmente útiles para equipos que prefieren delegar la complejidad de la gestión de accesos, protocolos y autenticación a soluciones externas probadas y confiables.
Un ejemplo común es el uso de herramientas como Kong, AWS API Gateway y API Platform, que actúan como un único punto de entrada para solicitudes desde aplicaciones web, móviles o incluso sistemas de terceros. Estos gateways pueden unificar diferentes métodos de acceso, como REST o GraphQL, y aplicar políticas de autenticación y autorización consistentes.
En resumen, los API Gateways son una opción eficiente para equipos que buscan simplificar la administración de accesos y flujos de trabajo, apoyándose en herramientas externas que ofrecen flexibilidad y robustez sin necesidad de desarrollar soluciones desde cero.
5. Mediadores de Eventos
Los Mediadores de Eventos son ideales en arquitecturas impulsadas por eventos (Event-Driven Architectures), donde la lógica del sistema se organiza alrededor de la mediación de eventos entre los servicios backend y los frontends. Estos mediadores funcionan como puntos de enlace que distribuyen, transforman y procesan eventos según las necesidades específicas de cada frontend o flujo.
Este enfoque divide la base de código, permitiendo un mejor manejo de los eventos y una mayor estabilidad en el sistema. Cada mediador puede enfocarse en las particularidades de un frontend o grupo de frontends, gestionando eventos de manera aislada y reduciendo la complejidad de la lógica compartida.
Un ejemplo práctico sería un sistema que gestiona pedidos y notificaciones en tiempo real. Podría tener un mediador para frontends finales, encargado de notificar cambios en los pedidos, y otro para administradores, que maneje eventos relacionados con la gestión de inventarios y reportes. Esta separación garantiza que cada tipo de frontend reciba solo los eventos relevantes para sus necesidades, manteniendo el sistema modular y eficiente.
En resumen, los Mediadores de Eventos son una solución poderosa para sistemas basados en eventos, ofreciendo flexibilidad y estabilidad al dividir responsabilidades según los flujos específicos de cada frontend.
Beneficios de los Backends for Frontends (BFF)
1. Aislamiento por frontend
Cada backend puede personalizarse para satisfacer las necesidades específicas de un tipo de frontend, lo que resulta en una experiencia de usuario más adaptada y eficiente. Este enfoque asegura que las diferencias entre dispositivos, roles o protocolos se gestionen de manera independiente, sin afectar a otros frontends.
2. Descentralización
Al asignar un backend dedicado a cada frontend, los equipos pueden trabajar de manera autónoma en su propia solución. Esto les permite usar las tecnologías y metodologías más adecuadas para su caso, acelerando el desarrollo y reduciendo dependencias entre equipos.
3. Reducción de complejidad
Encapsular las variaciones en los BFF simplifica la capa de servicios principales, haciendo que el sistema sea más manejable y modular. Los servicios subyacentes no necesitan preocuparse por las diferencias entre frontends, ya que esto se resuelve en la capa de BFF.
Cuándo evitar los Backends for Frontends (BFF)
Aunque los BFF son útiles en muchos escenarios, no siempre son la mejor opción. Algunos casos donde podrían no ser adecuados incluyen:
- Cuando los frontends son similares: Si los diferentes frontends comparten gran parte de la lógica o funcionalidad, los BFF pueden introducir redundancia, dificultar la reutilización del código y aumentar el esfuerzo de mantenimiento.
- Cuando no hay equipos claros para cada frontend: La falta de propiedad definida sobre los backends puede llevar a una desorganización en la gestión y desarrollo de los BFF, causando más problemas que soluciones.
Evolución de los Backends for Frontends (BFF)
Conforme un sistema crece, los BFF pueden evolucionar para resolver desafíos y optimizar su funcionamiento:
- Fusionar BFF: Cuando los backends dedicados comienzan a compartir demasiada funcionalidad, puede tener sentido consolidarlos en un único orquestador que gestione las necesidades comunes.
- Añadir una capa de integración compartida: Una capa intermedia que ofrezca APIs comunes puede aliviar a los BFF de gestionar lógica compartida, simplificando su estructura y mantenimiento.
- Uso de Sidecars: En un service mesh, los sidecars pueden proporcionar librerías compartidas que reduzcan redundancia entre los BFF, mejorando la consistencia y modularidad.
Conclusión
Los Backends for Frontends son una herramienta poderosa para gestionar las variaciones específicas de cada frontend en sistemas complejos. Sin embargo, su implementación debe equilibrar flexibilidad, rendimiento y reutilización del código para evitar problemas de redundancia y mantenimiento. Cuando se aplican correctamente, los BFF facilitan la creación de sistemas más modulares, adaptativos y efectivos, mejorando tanto la experiencia de los usuarios como la productividad de los equipos de desarrollo.
Referencias:
· Backends for Frontends (BFF)