2009-11-28 14 views
19

He estado usando la siguiente pila de desarrollo web desde hace unos años:Middleware para MongoDB o CouchDB con jQuery Ajax/JSON frontend

java/primavera/hibernación/mysql/embarcadero/portillo/jQuery

Para ciertos requisitos, estoy considerando cambiar a un almacén de datos NoSQL con una interfaz AJAX. Probablemente construiría la interfaz con jQuery y me comunicaría con el middleware de aplicaciones web usando JSON. Me estoy inclinando hacia MongoDB debido a las capacidades de consulta más dinámicas, pero todavía estoy considerando CouchDB.

No estoy seguro de qué usar en el medio. Probablemente algo RESTful? Mi preferencia es seguir con Java (o tal vez con Scala o Groovy) ya que estoy usando herramientas como Drools para reglas y Shiro para seguridad. Pero, de nuevo, quiero elegir algo que sea rápido y fácil de trabajar, por lo que estoy abierto a otras soluciones.

Si está creando soluciones ajax/json/nosql, me gustaría escuchar detalles sobre qué herramientas está utilizando y las ventajas y desventajas que ha encontrado al usarlas.

+0

Miró a Jersey y Restlets, pero se inclinó hacia Jersey. – Tauren

+0

¿Por qué quieres cambiar? ¿Cuáles son esos "ciertos requisitos"? Soy curioso. – Theo

+0

@Theo: de hecho, me gusta la pila que he estado usando y planeo seguir usándola en algunos aspectos. Pero no es tan escalable, y estoy considerando avanzar hacia JSON/REST para ayudar con esto. Además, usar wicket significa pasar HTML a través del cable, e incluso con AJAX, esto da como resultado mucho más uso de ancho de banda que solo pasar JSON y dejar que el navegador genere el HTML. – Tauren

Respuesta

5
  1. Elija el middleware con el que se sienta más cómodo.

  2. CouchApp es muy experimental por el momento. El problema principal es poder agregar seguridad a su aplicación sin tener un cuadro emergente HTTP estándar. Esto es obviamente un gran problema para las aplicaciones web estándar.

  3. Intente y evite analizar cada solicitud de base de datos en el middleware y vuelva a generar la consulta para couchdb. Puede hacer que su middleware actúe como un proxy, por lo que la mayoría de las solicitudes se reenvían sin modificaciones. También puede agregar una capa de seguridad en el middlelayer sobre todas las solicitudes que necesitan autenticación.

  4. Elija un middleware/framework con buenas capacidades de enrutamiento de URL. Por ejemplo, puede enrutar todas las solicitudes que van a mydomain.com/db/ a couchdb.

+0

Muy buenos puntos, gracias! Tengo la intención de utilizar su sugerencia para que el middleware actúe solo como un proxy. – Tauren

+0

¿Cuál es el razonamiento detrás de # 3? -> "Intenta evitar analizar cada solicitud de DB en el middleware y reconstruir la consulta para couchdb. Puedes hacer que tu middleware actúe como un proxy para que la mayoría de las solicitudes se reenvíen sin modificaciones. También puedes agregar una capa de seguridad en el middlelayer en la parte superior de todas las solicitudes que necesitan autenticación ". – Geoff

3

Si usa CouchDB, puede usar CouchApp, que es un conjunto de scripts para implementar una aplicación directamente en una base de datos CouchDB. Básicamente, omite el middleware y usa las vistas, listas y funciones de CouchDB junto con el JavaScript del lado del cliente para implementar toda la aplicación. Si su aplicación funciona en esta arquitectura, es sorprendentemente refrescante, simple y genial.

+0

Interesante, gracias! Pero, ¿cómo se maneja la seguridad con una solución como esta? Los usuarios de mi sistema deben iniciar sesión para acceder a los datos, y luego solo pueden ver ciertos datos según los permisos que tiene su cuenta. – Tauren

+0

CouchApp es genial, pero diría que es solo para la creación de prototipos y la experimentación en etapas iniciales. Lo superarás; sin embargo, puede convertirse en una parte de su aplicación total. – JasonSmith

+0

Entonces, ¿qué hacen otros que usan CouchApp cuando lo superan? Por lo que puedo decir, lo superaría desde el principio. – Tauren

1

He estado jugando con algunos. En última instancia, me gustaría mover mi capa de controlador de MVC a la interfaz jQuery/javascript y usar JSON/REST puro para hablar con el back-end. Aunque el backend necesitará una gran seguridad y, para mi aplicación, cierta capacidad para realizar flujos de trabajo, consultas y reglas.

También puede ser que desee mirar:

1) Couldkit, que funciona en Tokio Gabinete. Admite JSONQuery y OAuth. Las ejecuciones en Ruby/Rack pueden tener suficiente funcionalidad. A Lok le gusta una implementación REST fuerte. 2) Persevere, que se basa en Java y es totalmente compatible con Dojo. Es REST-ish pero también tiene algunas llamadas de tipo RPC. Parece muy potente en general, con secuencias de comandos java en el lado del servidor, etc.

No me importaría escuchar cómo estás.

Saludos, Alex

+0

Gracias! No he investigado en el cloudkit ni he perseverado todavía, así que pasaré un tiempo con ellos. Sus requisitos son similares, necesitan seguridad, flujos de trabajo, reglas, etc. También necesito i18n y L10n y personalizaciones de nivel de usuario (temas/diseño/etc.). La temática se puede manejar desde el lado del cliente, pero no quiero hacer i18n en el cliente. Debido a que mi pila actual ya hace mucho de esto, estoy jugando con dejar que sirva html i18n'ed que incluye el código jquery. El jquery funcionaría de manera independiente usando consultas JSON/REST a través de Jersey. La migración desde mi implementación actual podría ser más simple de esta manera. – Tauren

2

Además, si te gusta la idea de JSON/REST y pegarse a JavaScript de cliente a servidor, la nueva generación del núcleo de Persevera, Pintura es el marco pura/DESCANSO JS JSON que está diseñado específicamente para funciona bien con NoSQL DBs.

+0

Gracias Kris, comprobaré Pintura. – Tauren

0

Escribí una gema llamada Rack::JSON para exactamente este propósito, actúa como una interfaz REST básica para un MongoDB db. Fue inspirado por Cloudkit y es compatible con JSONQuery y también se ejecuta en Ruby/Rack. Le permite almacenar y luego acceder/consultar documentos JSON.

Cuestiones relacionadas