2012-09-27 25 views
8

Actualmente estoy desarrollando una aplicación web, que depende en gran medida de los clientes de dispositivos móviles y de escritorio que consultan el servidor web para obtener información. Esto se puede lograr muy bien haciendo que una API RESTful esté disponible para manejar esto. Así que mi idea es tener una aplicación que actúe como la "plataforma" que maneja toda la información de lógica de negocios real y de la base de datos detrás de las cortinas.Sitio web Symfony2 y API RESTful

Mi plan es hacer que la plataforma use los mecanismos de autenticación symfony2 y OAuth 2.0, combinados con los servicios web RESTful.

Ahora mi verdadero dilema viene en el componente del sitio web. Idealmente, me gustaría pensar que el sitio web es otro cliente que solicita información a esta plataforma REST y la separa por completo de la plataforma misma.

Para hacerlo un poco más claro, digamos que estamos haciendo un blog con esta arquitectura, por lo que uno tendría una "plataforma/backend" que proporciona un servicio de descanso para enumerar artículos, por ejemplo:/articles/5 . Esto en el back-end, y con Symfony2/doctrine significa que la aplicación tiene una clase de modelo Article, y estos pueden ser solicitados desde el DB. Un controlador simple consulta el artículo número 5 y devuelve toda la información en formato JSON.

Ahora el sitio web en este ejemplo, podría hacer lo fácil y también tener una entidad Article y solo consultar la base de datos directamente, pero creo que sería más limpio si solo pudiera hablar con la plataforma a través de su API REST y use esa información como un "back-end" para las entidades.

Así que la verdadera pregunta sería, ¿hay alguna forma de apoyar este tipo de diseño usando Symfony2? ¿Las entidades se basan en una API REST para las operaciones CRUD? ¿O estoy mejor haciendo que la plataforma/sitio web sea una sola cosa y comparta un "CoreBundle" con todas las entidades genéricas?

+0

¿Ha encontrado una solución para esto? Estaria interesado. – sprain

+0

En realidad lo hice. Terminé por hacer que el sitio web fuera otro cliente y solicitando datos de la plataforma a través de solicitudes http. Estoy usando guzzle (con mi propio GuzzleBundle para Symfony2) para hacer las solicitudes y deserializar automáticamente las respuestas JSON en entidades. En el lado web, en realidad tengo entidades duplicadas pero sin ninguna asignación de doctrina, y en algunos casos los datos reales terminaron siendo diferentes entre la entidad comercial real en el backend que los datos necesarios para el front-end. Si es de alguna utilidad para ti, mi paquete de guzzle está en https://github.com/xamado/guzzle-bundle – Xavier

+0

¡Gracias! Entonces, ¿tiene realmente dos solicitudes para cada solicitud en su sitio web? Esto es algo que me gustaría evitar .. – sprain

Respuesta

1

No hay nada en Symfony que le impida hacer lo que quiera.

En el lado del cliente puede usar Backbone.js o Spine.js.

+0

Supongo que olvidé mencionar que el sitio web también era un proyecto symfony2, ahí es donde entra en juego mi pregunta sobre cómo manejar un sitio web symfony2 de donde provienen las entidades una API de REST y no, digamos, doctrina. – Xavier