वेब अनुप्रयोगों के विकास के लिए कम्पोजिट अब एक पूर्ण ढांचा नहीं है। 0.4 रिलीज के बाद से, कई परियोजनाओं में कंपोजर को तोड़ दिया गया है।
रिंग HTTP अनुरोध और प्रतिक्रिया प्रक्रिया को दूर करके नींव प्रदान करता है। रिंग आने वाले अनुरोध को पार्स कर देगा और सभी मानचित्रों जैसे उरी, सर्वर-नाम और अनुरोध-विधि से युक्त एक मैप उत्पन्न करेगा। तब आवेदन अनुरोध को संभाल लेगा और अनुरोध के आधार पर प्रतिक्रिया उत्पन्न करेगा। एक प्रतिक्रिया को निम्न कुंजियों वाले नक्शे के रूप में दर्शाया जाता है: स्थिति, शीर्षलेख, और निकाय। तो एक साधारण आवेदन की तरह दिखेगा:
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
रिंग का एक अन्य हिस्सा मध्य-बर्तन की अवधारणा है। यह कोड है जो हैंडलर और आने वाले अनुरोध और / या आउटगोइंग प्रतिक्रिया के बीच बैठता है। मध्य-वेयर में निर्मित कुछ में सत्र और स्टैकट्रेस शामिल हैं। सत्र मध्य-वेयर: अनुरोध मानचित्र में एक सत्र कुंजी जोड़ेगा, जिसमें अनुरोध करने वाले उपयोगकर्ता के लिए सत्र जानकारी शामिल है। यदि: सत्र कुंजी प्रतिक्रिया मानचित्र में मौजूद है, तो इसे वर्तमान उपयोगकर्ता द्वारा किए गए अगले अनुरोध के लिए संग्रहीत किया जाएगा। यद्यपि स्टैक ट्रेस मध्य-वेयर अनुरोध को संसाधित करते समय होने वाले किसी भी अपवाद को कैप्चर करेगा और स्टैक ट्रेस उत्पन्न करता है जिसे प्रतिक्रिया के रूप में भेजा जाता है यदि कोई अपवाद होता है।
रिंग के साथ सीधे काम करना थकाऊ हो सकता है, इसलिए कॉम्पोज्योर रिंग एब्सट्रैक्टिंग के विवरण के ऊपर बनाया गया है। आवेदन अब रूटिंग के संदर्भ में व्यक्त किया जा सकता है ताकि आप इस तरह से कुछ कर सकें:
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
कंपोजर अभी भी अनुरोध / प्रतिक्रिया मानचित्रों के साथ काम कर रहा है ताकि आप हमेशा जरूरत पड़ने पर उन तक पहुंच सकें:
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
इस स्थिति में {uri: uri} भाग पहुंचता है: अनुरोध मानचित्र में uri कुंजी और उस मूल्य पर uri सेट करता है।
अंतिम घटक हिचकी है जो html को आसान बनाता है। विभिन्न HTML टैग्स को वैक्टर के रूप में दर्शाया जाता है जिसमें पहला तत्व टैग नाम का प्रतिनिधित्व करता है और बाकी टैग का शरीर होता है। "<h2>A header</h2>"
बन जाता है [:h2 "A Header"]
। एक टैग के गुण एक वैकल्पिक मानचित्र में हैं। "<a href='/login'>Log In Page</a>"
बन जाता है [:a {:href "/login"} "Log In Page"]
। Html उत्पन्न करने के लिए टेम्पलेट का उपयोग करके एक छोटा सा उदाहरण दिया गया है।
(defn layout [title & body]
(html
[:head [:title title]]
[:body [:h1.header title] body]))
(defn say-hello [name]
(layout "Welcome Page" [:h3 (str "Hello " name)]))
(defn hiccup-routes
(GET "/user/:name" [name] (say-hello name)))
यहाँ कुछ दस्तावेज के किसी न किसी मसौदे का लिंक दिया गया है जो वर्तमान में कंपोजर के लेखक द्वारा लिखा जा रहा है जो आपको उपयोगी लग सकता है: कम्पोज्योर डॉक्टर