¿Cuál es el mejor enfoque para construir un sitio web dada la API RESTful existente?

Hay dos opciones para esto:

  1. Puro: cree un cliente de JavaScript en forma de una aplicación de página única. La aplicación interactúa directamente con la API.
    1. Predeterminado … con redirección: si elige la primera opción, suponiendo que está utilizando OAuth para su API, su aplicación web necesitará implementar el flujo implícito de OAuth. El inconveniente de esto es que el cliente, cuando se autentica en la API, realizará una redirección.
    2. Solo para aplicaciones oficiales: si no desea redirigir a sus usuarios, puede modificar el flujo de credenciales de usuario. ¿Cuál es el objetivo de este truco? asegúrese de que el token de actualización no esté expuesto al cliente. En este caso, se autentica en la API a través de su servidor y almacena el token de actualización cifrado en una cookie. El cliente utiliza el token de acceso para enviar solicitudes a la API. Cuando el token de acceso muere, le pide al servidor de aplicaciones que lo actualice. En este caso, el servidor de aplicaciones está representando o suplantando el servidor de autorización.
  2. Mixto: crea una aplicación web con páginas renderizadas en el servidor. La aplicación interactúa con la API a través del servidor. Nuevamente tienes dos opciones más:
    1. Forma fácil. implementar API y la aplicación del servidor como una sola aplicación. Compartirán sesión y podrá autenticarse como en cualquier otra aplicación. Si desea abrir su API a otros clientes, no tome este acceso directo
    2. La otra forma: en el punto 1.2 vimos cómo una aplicación web oficial puede suplantar a la API de autorización para evitar redireccionamientos. En este caso, está implementando la aplicación web en un contexto separado de su API. Pero el lado del servidor de la aplicación enviará todas las solicitudes a la API.

Mis elecciones son:

  • Utilice 2.1 para prototipo, demostración.
  • Use 1.2 para la aplicación web oficial
  • Use 1.1 en otros casos

Luego seleccione sus tecnologías preferidas para implementar, mi voto es para AngularJS.

EDITAR
Perdón por el formato. ¡Algo salió mal con las listas numeradas!

Depende. ¿Eres mejor en JavaScript del lado del cliente o JavaScript del lado del servidor? Por ejemplo, me siento más cómodo con el MVC del lado del servidor, por lo que mi inclinación sería elegir mi MVC del lado del servidor favorito (por ejemplo, express) y crear un sitio web que obtenga sus datos de la API REST. Personalmente, creo que esta configuración es más fácil de depurar, pero eso es solo porque no me siento cómodo con el desarrollo del cliente. La ventaja de una solución completa del lado del cliente es que su alojamiento para las páginas se simplifica enormemente. La desventaja es que pierdes algo de flexibilidad. Pero al final, todo se reduce a preferencias personales.

Una aplicación de servidor es casi un requisito. Depende de la funcionalidad de su aplicación móvil. Un navegador web no se puede vincular a un dispositivo, pero las aplicaciones móviles generalmente sí. Entonces, en el caso de su aplicación, ¿es aceptable si un usuario inicia la aplicación web desde múltiples navegadores? Es posible que necesite algo de lógica del lado del servidor para manejar eso.
Incluso de lo contrario, puede combinar algunas llamadas API en el lado web para un mejor rendimiento de la red.

Como Joe Muñoz ha dicho, realmente depende de con qué estés más familiarizado. También depende de otros aspectos, como lo que quieres decir con tener la misma funcionalidad que la aplicación móvil, así como el alcance del proyecto.

Express tiene sistemas de plantillas que puede usar, como Handlebars, EJS y Jade, que pueden usar los datos de su API. Cualquier UX básico se puede hacer a través de jQuery.

Otra opción es algo del lado del cliente. Ember.js, Backbone.js y Angular.js son herramientas poderosas. Sin embargo, realmente depende de su alcance y de lo que esté familiarizado. Si su sitio web no es demasiado complejo, entonces la opción anterior de usar Express y un sistema de plantillas es más rápido y fácil. Si está creando una aplicación web, entonces consideraría usar una de estas herramientas.