¿Es mejor separar las API de AngularJS y Rails (también conocido como microservicios) o integrar AngularJS en una aplicación Rails (también conocido como monolítico)?

Estás hablando de 2 enfoques diferentes para desarrollar aplicaciones basadas en navegador:

  1. Aplicación mono que incorpora backend y frontend en un repositorio / framework. Frontend se representa en controladores Rails (vistas HTML y JS / CSS a través de Asset Pipeline).
  2. Servidor API Rails separado que solo sirve API RESTful. Y una aplicación AngularJS separada que sirve HTML, JS y CSS.

Aunque # 1 es mucho más fácil de configurar e implementar para alguien que se está familiarizando con el desarrollo web, recomendaría firmemente el uso del enfoque # 2 debido a los siguientes beneficios:

  1. Diseño impulsado por API. En primer lugar, debe pensar en API, lo que facilitará la introducción de nuevos clientes más adelante: iOS, Android. También ayudará si decide hacer pública su API.
  2. Desacoplamiento Frontend está completamente desacoplado del backend: no más inyecciones de JavaScript tontas de los controladores Rails y peculiaridades de la tubería de activos. Use herramientas como hilo, paquete web y babel para crear una tubería para construir su aplicación frontend.
  3. Frontend se puede implementar en el cubo S3. Frontend es esencialmente un conjunto de activos estáticos: archivos HTML, JS y CSS. No tiene que ejecutar el servidor Linux para que estén disponibles para sus usuarios. Puede usar una combinación de bucket S3 y distribución CloudFront para servir su aplicación frontend rápidamente.
  4. Separación de intereses. Los desarrolladores se especializan naturalmente en diferentes áreas. Es común tener equipos separados trabajando en partes de aplicaciones de backend y frontend. Tenerlos en diferentes repositorios ayuda mucho porque no interfieren entre sí.
  5. Más escalable La vista de representación en el lado del servidor es computacionalmente costosa. La gente está usando motores de plantillas como Slim (un motor de plantillas rápido y liviano para Ruby) para mejorar eso, pero el problema aún está presente. Descargar el renderizado de vistas a navegadores / clientes móviles ayuda mucho en el escalado.

Algunas desventajas pero con soluciones alternativas:

  1. Es más difícil configurar 2 tuberías de compilación separadas. Pero hay muchos kits de inicio disponibles para simplificar este proceso. Ejemplo: preboot / angularjs-webpack
  2. Autenticacion de usuario. Con API back-end no se recomienda usar sesiones de navegador. Debe encontrar otro tipo de autenticación, preferiblemente oAuth2. Echa un vistazo a doorkeeper-gem / doorkeeper

Hola,

Creo que está malinterpretando el paradigma del microservicio, porque separar el frontend del backend no es una arquitectura de microservicio. En “microservicio” existe la palabra “servicio”, y la parte de la interfaz no debe considerarse como un servicio, es solo la presentación visual de lo que recupera de su servicio

Imaginemos que tiene un blog, con el cual los usuarios pueden registrarse para escribir artículos.

  • Monolítico : 1 aplicación front-end incluida en la aplicación / servicio de fondo que sirve datos de una base de datos.
  • [ frontend <=> backend] <=> base de datos
  • Arquitectura de 3 niveles : 1 aplicación front-end separada de una aplicación / servicio de fondo que sirve datos de una base de datos.
    • frontend <=> backend <=> base de datos
  • Arquitectura N-Tier : 1 aplicación front-end separada de la aplicación / servicio backend desplegada varias veces y que sirve datos de una base de datos (que puede ser replicada).
    • interfaz <=> backend * N <=> base de datos (* N)
  • Arquitectura de microservicios : 1 aplicación front-end separada de las aplicaciones / servicios, 1 back-end principal (la puerta de enlace) con lógica empresarial específica, 1 back-end para manejar entidades de usuario con su propia base de datos y 1 back-end para manejar entidades de artículo con su propia base de datos.
    • interfaz <=> mainBackend <=> usersBackend <=> usersDatabase
    • interfaz <=> mainBackend <=> articlesBackend <=> articlesDatabase

    No me extenderé en arquitecturas de bases de datos, no es el punto; pero como puede ver, está hablando de arquitecturas monolíticas versus arquitecturas de 3 niveles, pero no de microservicio.

    Y lo que es mejor … definitivamente la arquitectura de 3 niveles; la modularidad es parte de las mejores prácticas y, en general, las pilas monolíticas ocultan algunos protocolos de comunicación “mágicos” entre el front-end y el back-end que tendrán que tratar por su cuenta utilizando la arquitectura de 3 niveles.

    Esta es una pregunta cargada. Lo que está preguntando no es necesariamente la respuesta que obtendrá.

    Los servicios impulsados ​​por API proporcionan:

    • mayor escalabilidad
    • huella reducida
    • mayor velocidad
    • flexibilidad
    • interfaz para servicios externos / desarrolladores

    Al vincular los dos en un servicio monolítico, crea el doble de carga en su CPU en comparación con poder distribuir esa carga.

    Y la pérdida de E / S cuando todos los servicios están en la misma red es menos que mínima.

    Es por eso que este enfoque es el enfoque moderno más que el monolítico que está promoviendo.

    Estoy bastante seguro de que está hablando del mismo enfoque en ambos enlaces, ya que angular 1.x aún no se puede servir como una aplicación representada por servidor. Eso vendrá con angular universal hasta donde yo entiendo. Entonces, en ambos casos, tienes la aplicación angular golpeando una API. Si está hablando estrictamente sobre si los servicios y el front-end viven en el mismo repositorio de código … bueno, eso depende de usted y en muchos casos es más fácil trabajar con un repositorio “monolítico” ya que todas las dependencias internas viven en el proyecto. En este caso con Ruby y js no es tan útil porque no puedes compartir código común. Es por eso que ves que las aplicaciones isomórficas tienden a ser monolíticas.

    More Interesting

    ¿Cómo permite LinkedIn que SalesLoft raspe sus datos (sin su API) y agregue el botón 'Agregar prospecto'?

    ¿Qué es un buen raspador web en línea (SaaS) que tiene una GUI y un modelo de negocio freemium?

    ¿Por qué las nuevas empresas SaaS no ofrecen acceso de demostración?

    ¿Qué tan grande es el mercado para el software de gestión del éxito del cliente (CSM)?

    ¿Cuáles son los descuentos típicos que las compañías SaaS ofrecen para un contrato de varios años pagado por adelantado por un contrato de 2, 3 y 5 años? (Cinco es un tramo).

    ¿Cuáles son los productos SaaS más populares utilizados para la cocción de inversión?

    ¿Existe algún App Tech SDK que pueda ayudar en gran medida a calcular LTV por usuario o segmento / cohorte?

    Para las aplicaciones web, ¿es mejor solicitar la tarjeta de crédito antes de que comience su prueba (por ejemplo, en la página de registro) o después de que caduque la prueba?

    ¿Cuáles son los desafíos que enfrentan las compañías que venden soluciones SaaS para el éxito del cliente?

    ¿Existe algún dato o investigación que demuestre que * los propietarios de pequeñas empresas * típicos * prefieren una experiencia de usuario hermosa (es decir, Square o Gmail) sobre una experiencia promedio (es decir, SalesForce o Quickbooks)?

    Comparación improbable: QuickBase vs NetSuite?

    ¿Quiénes son algunos de los principales clientes de las herramientas de facturación recurrente de Braintree?

    ¿Cuáles son los desafíos de vender un producto SaaS que necesita integraciones con los sistemas heredados de un cliente?

    ¿Cómo se crea una interfaz de usuario para aplicaciones Android / iOS y SaaS?

    ¿Qué software de mesa de ayuda SaaS es el preferido para una etapa inicial de inicio, Help Scout, Trakdesk o Zendesk?