front end caracteristicas api rest deployment playframework openshift

api - caracteristicas - ¿Aplicaciones de back-end y front-end separadas en el mismo dominio?



front end y back end caracteristicas (3)

Estamos construyendo un back-end completamente RESTful con Play Framework. También estamos construyendo un front-end web separado con una pila de tecnología diferente que llamará la API RESTful.

¿Cómo implementamos ambas aplicaciones para que tengan el mismo nombre de dominio, con algunas direcciones URL utilizadas para la API de back-end y otras para las vistas front-end?

Por ejemplo, visitar MyDomain.com significa que el front-end muestra la página de inicio, pero el envío de un GET a MyDomain.com/product/24 significa que el back-end devuelve un objeto JSON con la información del producto. Una posibilidad adicional es si un navegador web ve MyDomain.com/product/24, entonces el front-end muestra una página HTML, y esa página web se creó a partir de una llamada de back-end a la misma url.

Finalmente, ¿necesitamos dos servidores dedicados para esto? O se pueden implementar el front-end y el back-end en el mismo servidor (por ejemplo, OpenShift, Heroku)


Vas a cavar tú mismo ... profundo :)

El enfoque más simple y limpio sin ninguna duda es crear una aplicación única que sirva datos tanto para BE como para FE, en la que difiere la respuesta (JSON frente a HTML) por la URL, seudo rutas:

GET /products/:id controllers.Frontend.productHtml(id) GET /backend/products/:id controllers.Backend.productJson(id)

Beneficios:

  • despliegue único (digamos a Heroku)
  • espacio de nombre gestionado desde una aplicación
  • No es necesario modificar los modelos en muchas aplicaciones después de cambiarlos en una de ellas

si no

Si realmente está decidido a crear dos aplicaciones separadas, use algún servidor HTTP como proxy, por ejemplo, nginx , por lo que enviará todas las solicitudes a domain.tld/* a la aplicación que trabaja en el puerto 9000 (que responderá con HTML ) pero solicita a domain.tld/backend/* redirigir a la aplicación que funciona en el puerto 9001 responde con JSON.

más

Si realmente va a responder con JSON o HTML dependiendo de la persona que llama, puede intentar comparar los encabezados para verificar si la solicitud se envió desde el navegador o desde la llamada AJAX en cada controlador, pero créame que se convertirá en una pesadilla más rápida que usted. .. insertar la moneda, elegir el sabor



Otra posibilidad (por lo tanto, como respuesta por separado) es usar una posibilidad agregada en Play 2.1.x una Content negotiation . Creo que es lo más cercano a lo que querías obtener inicialmente :)