2009-11-28 4 views
19

Je me sers de la pile de développement web suivante pour quelques années:Middleware pour MongoDB ou CouchDB avec jQuery frontend Ajax/JSON

java/printemps/mise en veille prolongée/mysql/jetée/guichet/jquery

Pour certaines exigences, j'envisage de passer à une banque de données NoSQL avec une interface AJAX. Je construirais probablement le frontend avec jQuery et communiquerais avec le middleware d'application web en utilisant JSON. Je suis penché vers MongoDB en raison de capacités de requête plus dynamiques, mais je considère toujours CouchDB.

Je ne sais pas quoi utiliser au milieu. Probablement quelque chose de RESTful? Ma préférence est de rester avec Java (ou peut-être Scala ou Groovy) puisque j'utilise des outils comme Drools pour les règles et Shiro pour la sécurité. Mais encore une fois, je veux choisir quelque chose qui est facile à travailler rapidement, donc je suis ouvert à d'autres solutions.

Si vous développez des solutions ajax/json/nosql, j'aimerais avoir des détails sur les outils que vous utilisez et sur les avantages et les inconvénients que vous avez trouvés pour les utiliser.

+0

Regardé dans Jersey et Restlets, mais se penchant vers Jersey. – Tauren

+0

Pourquoi voulez-vous changer? Quelles sont ces "exigences"? Je suis curieux. – Theo

+0

@Theo: en fait, j'aime la pile que j'ai utilisée et je prévois de continuer à l'utiliser pour certains aspects. Mais ce n'est pas tout ce qui est évolutif, et j'envisage de passer à JSON/REST pour l'aider. En outre, l'utilisation de guichet signifie le passage du code HTML sur le réseau, et même avec AJAX, ce qui entraîne beaucoup plus d'utilisation de la bande passante que de simplement passer JSON et laisser le navigateur générer le code HTML. – Tauren

Répondre

5
  1. Choisissez le logiciel qui vous convient le mieux.

  2. CouchApp est très expérimental pour le moment. Le principal problème est d'être en mesure d'ajouter la sécurité à votre application sans avoir de boîte pop-up HTTP standard. C'est évidemment un gros problème pour les applications Web standard. Essayez et évitez d'analyser chaque requête de base de données dans le middleware et de reconstruire la requête pour couchdb. Vous pouvez faire en sorte que votre middleware agisse comme un proxy afin que la plupart des demandes soient transmises sans modification. Vous pouvez également ajouter une couche de sécurité dans la couche intermédiaire en plus de toutes les demandes nécessitant une authentification. Choisissez un middleware/framework avec de bonnes capacités de routage d'URL. Par exemple, vous pouvez acheminer toutes les demandes qui vont à mydomain.com/db/ à couchdb.

+0

Très bons points, merci! J'ai pleinement l'intention d'utiliser votre suggestion pour que le middleware agisse comme un proxy. – Tauren

+0

Quelle est la logique derrière # 3? -> "Essayez d'éviter d'analyser chaque requête de base de données dans le middleware et de reconstruire la requête pour couchdb.Vous pouvez faire en sorte que votre middleware agisse comme un proxy afin que la plupart des requêtes soient transférées sans modification.Vous pouvez également ajouter une couche de sécurité dans la couche middlelayer. de toutes les demandes qui nécessitent une authentification. " – Geoff

3

Si vous utilisez CouchDB, vous pouvez utiliser CouchApp qui est un ensemble de scripts permettant de déployer une application directement dans une base de données CouchDB. Essentiellement, vous ignorez le middleware et utilisez les vues, les listes et les fonctions d'affichage de CouchDB avec le JavaScript côté client pour implémenter l'application entière. Si votre application fonctionne dans cette architecture, elle est étonnamment rafraîchissante, simple et cool.

+0

Intéressant, merci! Mais comment la sécurité est-elle gérée avec une solution comme celle-ci? Les utilisateurs de mon système doivent se connecter pour accéder aux données, puis ils peuvent uniquement voir certaines données en fonction des autorisations dont leur compte dispose. – Tauren

+0

CouchApp est cool mais je dirais que c'est seulement pour le prototypage et l'expérimentation au stade précoce. Vous allez le dépasser; Cependant, il peut devenir une partie de votre demande totale. – JasonSmith

+0

Alors, qu'est-ce que les autres utilisateurs de CouchApp font quand ils le dépassent? D'après ce que je peux dire, je le devancerais depuis le début. – Tauren

1

J'ai bricolé avec quelques-uns. En fin de compte, je voudrais déplacer ma couche contrôleur de MVC vers le frontend jQuery/javascript et utiliser JSON/REST pur pour parler avec le backend. Bien que le backend aura besoin de sécurité forte et, pour mon application, une certaine capacité à faire le flux de travail, les requêtes et les règles.

Vous pouvez également regarder:

1) Couldkit, qui fonctionne sur Tokyo Cabinet. Prend en charge JSONQuery et OAuth. Les exécutions sur Ruby/Rack peuvent avoir suffisamment de fonctionnalités. Les Loks aiment une implémentation REST forte. 2) Persévère, basé sur Java et fortement supporté dans Dojo. C'est REST-ish mais a aussi quelques appels de type RPC. Cela semble très puissant dans l'ensemble, avec des scripts java côté serveur, etc.

Ça ne me dérangerait pas d'entendre comment vous allez.

Cheers, Alex

+0

Merci! Je n'ai pas encore étudié le cloudkit ni persévéré, alors je passerai du temps avec eux. Vos besoins sont similaires, ils ont besoin de sécurité, de flux de travail, de règles, etc. J'ai également besoin de personnalisations i18n et L10n et au niveau de l'utilisateur (thèmes/disposition/etc). Theming peut être manipulé côté client, mais je ne veux pas faire i18n sur le client. Parce que ma pile actuelle fait déjà beaucoup de cela, je suis en train de jouer avec le fait de laisser le code html i18n qui inclut le code jquery. La jquery fonctionnerait alors indépendamment en utilisant des requêtes JSON/REST via Jersey. La migration de ma mise en œuvre actuelle pourrait être plus simple de cette façon. – Tauren

2

Aussi, si vous aimez l'idée de JSON/REST et coller au client JavaScript au serveur, la nouvelle génération de noyau de Persévérez, Pintura est pur JS cadre JSON/REST qui est conçu spécifiquement pour fonctionne bien avec les bases de données NoSQL.

+0

Merci Kris, je vais vérifier Pintura. – Tauren

0

J'ai écrit une gemme appelée Rack::JSON exactement dans ce but, elle agit comme une interface REST de base pour un MongoDB db. Il a été inspiré par Cloudkit et prend en charge JSONQuery et fonctionne également sur Ruby/Rack. Il vous permet de stocker, puis accéder/interroger des documents JSON.