2009-11-28 32 views
19

Używam następujący stos tworzenie stron internetowych przez kilka lat:Middleware dla MongoDB lub CouchDB z jQuery AJAX/JSON frontend

java/wiosna/hibernacji/mysql/molo/Furtka/jQuery

W przypadku niektórych wymagań rozważam przejście na magazyn danych NoSQL z interfejsem AJAX. Prawdopodobnie zbudowałbym frontend z jQuery i komunikowałbym się z oprogramowaniem pośredniczącym do aplikacji webowej za pomocą JSON. Pochylam się do MongoDB ze względu na bardziej dynamiczne możliwości zapytań, ale wciąż rozważam CouchDB.

Nie jestem pewien, czego użyć w środku. Prawdopodobnie coś RESTful? Wolę trzymać się Java (a może Scala lub Groovy), ponieważ używam narzędzi takich jak Drools dla reguł i Shiro dla bezpieczeństwa. Ale potem znowu chcę wybrać coś, co jest szybkie i łatwe w obsłudze, więc jestem otwarty na inne rozwiązania.

Jeśli budujesz rozwiązania ajax/json/nosql, chciałbym usłyszeć szczegóły na temat narzędzi, z których korzystasz oraz wszelkich plusów/minusów, których używasz.

+0

Wygląda na Jersey i Restlety, ale pochyla się w kierunku Jersey. – Tauren

+0

Dlaczego chcesz się przełączyć? Jakie są te "pewne wymagania"? Jestem ciekawy. – Theo

+0

@Theo: właściwie podoba mi się stos, z którego korzystałem i planuję go nadal używać w niektórych aspektach. Ale nie jest to wszystko skalowalne i rozważam przejście do JSON/REST, aby pomóc w tym. Ponadto, używanie bramki oznacza przekazywanie kodu HTML przez przewód, a nawet AJAX, powoduje to o wiele większe wykorzystanie przepustowości niż tylko przekazywanie JSON i umożliwianie przeglądarce generowania kodu HTML. – Tauren

Odpowiedz

5
  1. Wybierz dowolne oprogramowanie pośrednie, z którym najbardziej Ci odpowiada.

  2. CouchApp jest obecnie bardzo eksperymentalna. Głównym problemem jest możliwość dodania zabezpieczeń do aplikacji bez posiadania standardowego okna podręcznego HTTP. Jest to oczywiście duży problem dla standardowych aplikacji internetowych.

  3. Spróbuj pominąć parsowanie każdego żądania DB w oprogramowaniu pośredniczącym i przebudować zapytanie dla couchdb. Możesz sprawić, by Twoje oprogramowanie pośredniczące działało jak serwer proxy, więc większość żądań jest przekazywana bez modyfikacji. Możesz także dodać warstwę zabezpieczeń na poziomie pośrednim na wszystkich żądaniach, które wymagają uwierzytelnienia.

  4. Wybierz oprogramowanie pośrednie/środowisko z dobrym routingiem adresów URL. Na przykład możesz przekierować wszystkie żądania, które trafiają na mydomain.com/db/ do couchdb.

+0

Bardzo dobre punkty, dzięki! W pełni zamierzam użyć twojej sugestii, aby oprogramowanie pośredniczące działało jak zwykły serwer proxy. – Tauren

+0

Jakie są przesłanki związane z # 3? -> "Staraj się unikać analizowania każdego żądania DB w oprogramowaniu pośredniczącym i przebudowywania zapytania dla couchdb. Możesz sprawić, by twoje oprogramowanie pośredniczące działało jak proxy, więc większość żądań jest przekazywana bez modyfikacji. Możesz także dodać warstwę zabezpieczeń w środku pośredniczącym na górze wszystkich żądań wymagających uwierzytelnienia. " – Geoff

3

Jeśli używasz CouchDB, możesz użyć CouchApp, który jest zbiorem skryptów do wdrażania aplikacji bezpośrednio do bazy danych CouchDB. W zasadzie pomija się oprogramowanie pośrednie i wykorzystuje widoki CouchDB, listy i funkcje wyświetlania wraz z JavaScriptem klienta, aby zaimplementować całą aplikację. Jeśli Twoja aplikacja działa w tej architekturze, jest zaskakująco odświeżająca, prosta i fajna.

+0

Interesujące, dzięki! Ale w jaki sposób zabezpieczenia są obsługiwane za pomocą takiego rozwiązania? Użytkownicy mojego systemu muszą się logować, aby uzyskać dostęp do danych, a następnie widzą tylko określone dane na podstawie uprawnień posiadanych przez ich konta. – Tauren

+0

CouchApp jest fajny, ale powiedziałbym, że jest to tylko do wczesnego etapu prototypowania i eksperymentowania. Wyrośniecie z tego; jednak może stać się częścią twojego całkowitego zastosowania. – JasonSmith

+0

Więc co robią inni, którzy używają CouchApp, kiedy go przerastają? Z tego co wiem, przerastam to od samego początku. – Tauren

1

Wymieniłem kilka z nich. Ostatecznie chciałbym przenieść warstwę kontrolera MVC do frontendu jQuery/javascript i użyć czystego JSON/REST do rozmowy z backendem. Mimo że backend będzie wymagał silnych zabezpieczeń, a dla mojej aplikacji możliwość wykonywania przepływu pracy, zapytań i reguł.

też może warto spojrzeć na:

1) Couldkit, która biegnie na Tokio gabinetu. Obsługuje JSONQuery i OAuth. Działa na Ruby/Rack może mieć wystarczającą funkcjonalność. Loks to mocna implementacja REST. 2) Wytrwałość, która jest oparta na Javie i mocno wspierana w Dojo. Jest to REST-owski, ale ma również pewne wywołania typu RPC. Wydaje się być bardzo wszechstronny, ze skryptami java po stronie serwera, itp.

Nie miałbym nic przeciwko temu, jak się zbliżasz.

Cheers, Alex

+0

Dzięki! Nie zajrzałem jeszcze do cloudkita ani nie wytrwaliłem, więc spędzę z nimi trochę czasu. Twoje wymagania są podobne, wymagają zabezpieczeń, przepływów pracy, reguł itp. Potrzebuję również i18n i L10n oraz dostosowań na poziomie użytkownika (tematy/layout/etc). Programowanie może być obsługiwane po stronie klienta, ale nie chcę wykonywać klienta i18n na kliencie. Ponieważ mój obecny stos robi już wiele z tego, bawię się, pozwalając mu podawać i18n'ed html, który zawiera kod jquery. JQuery będzie wtedy działać niezależnie przy użyciu zapytań JSON/REST przez Jersey. Migracja z mojej obecnej implementacji może być prostsza w ten sposób. – Tauren

2

Także, jeśli podoba mi się pomysł JSON/ODPOCZYNKU i przylegającą do klienta JavaScript do serwera, nowsza generacja rdzenia wytrwać, w Pintura jest czystym JS JSON ram/REST, która została zaprojektowana specjalnie w celu działa dobrze z bazami danych NoSQL.

+0

Dzięki Kris, sprawdzę Pinturę. – Tauren

0

Napisałem klejnot o nazwie Rack::JSON w tym właśnie celu, działa on jako podstawowy interfejs REST do bazy danych MongoDB. Zainspirowała go Cloudkit i obsługuje JSONQuery, a także działa na Ruby/Rack. Pozwala na przechowywanie, a następnie dostęp/wysyłanie zapytań do dokumentów JSON.