Przypuszczam, że jest to dziwne pytanie dla ogromnej większości programistów, którzy codziennie pracują z Javą. Ja nie. Znam język Java, ponieważ pracowałem nad projektami Java, ale nie Java-the-world. Nigdy nie tworzyłem aplikacji internetowej od zera w Javie. Jeśli muszę to zrobić w Pythonie, Ruby, wiem gdzie iść (Django lub Rails), ale jeśli chcę stworzyć aplikację internetową w Clojure, nie dlatego, że jestem zmuszony żyć w świecie Java, ale dlatego, że lubię ten język i chcę go wypróbować, jakich bibliotek i ram powinienem użyć?
216
Odpowiedzi:
Zdecydowanie najlepszym frameworkiem Clojure, z jakim się zetknąłem, jest Compojure: http://github.com/weavejester/compojure/tree/master
Jest mały, ale mocny i ma pięknie elegancką składnię. (Używa Jetty pod maską, ale ukrywa przed sobą API serwletów, chyba że tego chcesz, co nie będzie często). Przejrzyj plik README pod tym adresem URL, a następnie pobierz migawkę i zacznij grać.
źródło
Compojure nie jest już kompletnym środowiskiem do tworzenia aplikacji internetowych. Od wydania wersji 0.4 komponowanie zostało podzielone na kilka projektów.
Pierścień stanowi podstawę, wyodrębniając proces żądania i odpowiedzi HTTP. Pierścień przeanalizuje przychodzące żądanie i wygeneruje mapę zawierającą wszystkie części żądania, takie jak nazwa użytkownika, nazwa serwera i metoda żądania. Aplikacja obsłuży następnie żądanie i na podstawie żądania wygeneruje odpowiedź. Odpowiedź jest reprezentowana jako mapa zawierająca następujące klucze: status, nagłówki i treść. Prosta aplikacja wyglądałaby następująco:
Inną częścią Ringa jest koncepcja oprogramowania pośredniego. Jest to kod umieszczony między modułem obsługi i przychodzącym żądaniem i / lub odpowiedzią wychodzącą. Niektóre z wbudowanych programów pośrednich obejmują sesje i stacktrace. Oprogramowanie sesji doda klucz: sesja do mapy żądań, która zawiera wszystkie informacje o sesji dla użytkownika wysyłającego żądanie. Jeśli klucz sesji: jest obecny na mapie odpowiedzi, zostanie zapisany dla następnego żądania złożonego przez bieżącego użytkownika. Podczas gdy oprogramowanie pośredniczące śledzenia stosu przechwytuje wszelkie wyjątki występujące podczas przetwarzania żądania i generuje dane śledzenia stosu, które są odsyłane jako odpowiedź, jeśli wystąpią jakiekolwiek wyjątki.
Bezpośrednia praca z Pierścieniem może być żmudna, dlatego Compojure jest zbudowany na Pierścieniu , który usuwa szczegóły. Aplikacja może być teraz wyrażona w kategoriach routingu, dzięki czemu możesz mieć coś takiego:
Compojure nadal pracuje z mapami zapytań / odpowiedzi, więc zawsze możesz uzyskać do nich dostęp w razie potrzeby:
W tym przypadku część {uri: uri} uzyskuje dostęp do klucza: uri w mapie żądań i ustawia wartość uri na tę wartość.
Ostatnim komponentem jest czkawka, która ułatwia generowanie html. Różne znaczniki html są reprezentowane jako wektory, przy czym pierwszy element reprezentuje nazwę znacznika, a pozostała część jest znacznikiem.
"<h2>A header</h2>"
staje się[:h2 "A Header"]
. Atrybuty znacznika znajdują się na opcjonalnej mapie."<a href='/login'>Log In Page</a>"
staje się[:a {:href "/login"} "Log In Page"]
. Oto mały przykład użycia szablonu do wygenerowania html.Oto link do wstępnego szkicu pewnej dokumentacji obecnie pisanej przez autora kompozycji, która może być dla Ciebie pomocna: Dokument Compojure
źródło
Istnieje również „Noir” ( http://www.webnoir.org/ ), który jest nowym frameworkiem sieciowym Clojure (więc nowych dokumentów jeszcze nie ma). Pochodząc z Django / Rails, kopie prostą składnię i jest dość uboga.
źródło
Zastanów się nad strukturą internetową Luminus . Nie mam przynależności, ale słyszałem dobre rzeczy od przyjaciół, których szanuję.
źródło
Moja obecna biblioteka internetowa to yada .
Jeśli dopiero zaczynasz, serwerem wprowadzającym jest
Compojure
. Widzę to jakoapache
serwer WWW w świecie Clojure (w takim przypadku yada / aleph to nginx). Możesz użyćLuminus
jako szablonu. Istnieją jego wariantycompojure-api
.Próbowałem ou
Pedestal
i byłem z tego globalnie zadowolony. Nie twierdzę, że go opanowałem, ale ma przyjemną składnię, wydaje się bardzo spójny i wygląda na świetną wydajność. Jest również wspierany przezCognitect
(firmę Clojure / Datomic, w której pracuje Rich Hickey).Okazało się,
Aleph
że prezentuję interesującą abstrakcję, a wbudowane przeciwciśnienie wydaje się interesujące. Jeszcze się nim nie bawiłem, ale zdecydowanie jest na mojej liście.Po krótkiej grze z różnymi serwerami internetowymi, oto moja szybka lista Pro / Cons:
Krótka odpowiedź: spójrz na Luminusa, aby szybko zacząć, być może przejdź do czegoś innego w miarę ewolucji twoich potrzeb (może Yada).
Compojure
Plusy (1):
Minusy (2):
Piedestał
Plusy (3):
Minusy (4):
Aleph
Pro (3):
Minusy (1):
Yada
Pro (3):
Minusy (1):
HttpKit
Pro (2):
Minusy (2):
Nginx-Clojure
Uwaga: nie grałem z tym, głównie z powodu braku dokumentacji. Wygląda jednak interesująco i bardzo wydajnie.
Plusy (2):
Minusy (1):
Odporny
Uwaga: nie grałem z tym.
Plusy:
Cons :
Catacumba
Uwaga: nie grałem z tym, chociaż dokumentacja wygląda doskonale. Prawdopodobnie zamierzam spróbować później. Istnieją przykładowe projekty czatów, które wyglądają interesująco, ich intensywne wykorzystanie protokołów zniechęciło mnie na początku jako początkującego programistę Clojure.
Plusy (6):
Minusy (2):
Uwaga : dostępny jest test porównawczy serwerów sieciowych Clojure , jeśli liczy się tylko wydajność.
źródło
W dzisiejszych czasach Cokół jest strukturą wartą obejrzenia. Jest to platforma po stronie serwera, która opiera się na Ring , ale także uwalnia przychodzące żądanie z początkowego wątku, ponieważ jest w stanie wstrzymać i wznowić to konkretne żądanie (w przeciwnym razie wolne żądanie faktycznie blokuje ten wątek serwera). Może trochę jak JavaBean.
Inne fajne frameworki to hoplon.io i Om Davida Nolena (na podstawie React)
źródło
Webjure , framework do programowania stron internetowych dla Clojure.
Cechy: Wywołanie serwletu wywołuje funkcje Clojure. Dynamiczne generowanie HTML. Interfejs zapytań SQL (przez JDBC).
Ta odpowiedź ma być symbolem zastępczym dla informacji o Webjure.
źródło
Compojure to to, co kiedyś tworzyłem małą aplikację do blogowania. Jest wzorowany na Sinatrze, która jest minimalną, lekką platformą internetową dla Ruby. Przeważnie korzystałem z routingu, podobnie jak Sinatry. To wygląda jak:
Nie ma biblioteki ORM ani szablonów, ale ma funkcje, które przekształcają wektory w HTML.
źródło
Możesz także spojrzeć na te frameworki (wzięte z ujawnienia / projektów ):
Jest jeszcze jedno powiązane pytanie na temat Przepełnienia stosu: starsze frameworki internetowe Clojure?
źródło
Oświadczenie: Jestem autorem.
Złożyłem szablon leiningen, który łączy szablony luminusweb i kasztanowe. Otrzymujesz więc coś, z czego możesz zbudować kod clojure i kod clojurescript dla frontonu i backendu.
Dodatkowo zapewnia zarządzanie użytkownikami oraz proste generowanie CRUD i kilka innych małych i przyjemnych: https://github.com/sveri/closp
źródło
Wrzucę moje dwa centy za Duct , również od @weavejester , opiekuna Compojure i Ring.
U ich podstaw leży Component i router Ring pod jednym dachem. Powody, dla których używam Duct:
Główne cechy:
Uwaga: To oczywiste, ale z korzyścią dla początkujących twórców stron internetowych, podobnie jak większość rzeczy Clojurey, Duct wymaga solidnej znajomości języka Clojure. Polecam również najpierw przeczytać o komponencie.
Z innej osobistej uwagi, korzystałem z Duct w kilku aplikacjach produkcyjnych od ponad roku i jestem z tego bardzo zadowolony.
źródło
możesz także wypróbować Clojure na cewkach, http://github.com/zubairq/coils - wyłączenie odpowiedzialności: Jestem autorem
źródło
Innym interesującym serwerem internetowym jest zestaw HTTP . Ma dobrą wydajność i jest zgodny z pierścieniem, a także obsługuje WebSockets. Jest produkowany głównie w clojure i brakuje niektórych dziwnych rzeczy w Jetty / Tomcat.
Łatwo go majstrować.
źródło
Odśwież i om. Prawdopodobnie to, czego szukasz.
źródło
Arachne to platforma internetowa dla początkujących. Cytując opis strony:
Ma kampanię typu kickstarter, która twierdzi, że oferuje „pierwsze kroki” podobne do Railsów. Jest rozwijany przez Cognitect.
Oto dobra dyskusja na ten temat z autorem Luminusa (yogthos).
źródło
Od dłuższego czasu z powodzeniem używam Liberatora w produkcji. Jest to świetny framework, jeśli chcesz tylko gołe kości, np. Jeśli budujesz usługę internetową RESTful lub coś podobnego. Zasadniczo jest to opakowanie dla pierścienia i komponentu i zapewnia wykres decyzji podczas sprawdzania poprawności przychodzących żądań. Jest także niezwykle szybki w porównaniu z innymi bardziej nieporęcznymi strukturami sieciowymi. Jeśli chcesz zacząć gdzieś szybko i powoli budować, Liberator to świetny wybór.
źródło