Compojure artık web uygulamaları geliştirmek için eksiksiz bir çerçeve değil. 0.4 sürümünden bu yana, pek çok projeye ayrıldı.
Ring , HTTP isteğini ve yanıt sürecini soyutlayarak temeli sağlar. Ring, gelen isteği ayrıştırır ve isteğin uri, sunucu adı ve request-method gibi tüm bölümlerini içeren bir harita oluşturur. Uygulama daha sonra isteği işleyecek ve isteğe bağlı olarak bir yanıt oluşturacaktır. Yanıt, şu anahtarları içeren bir harita olarak temsil edilir: durum, başlıklar ve gövde. Yani basit bir uygulama şöyle görünecektir:
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
Ring'in bir diğer parçası ise orta eşya kavramıdır. Bu, işleyici ile gelen istek ve / veya giden yanıt arasında bulunan koddur. Bazı orta eşya yerleşik oturumları ve yığın izini içerir. Oturum orta donanımı, istek haritasına, isteği yapan kullanıcının tüm oturum bilgilerini içeren bir: oturum anahtarı ekler. Yanıt haritasında: oturum anahtarı varsa, geçerli kullanıcı tarafından yapılan bir sonraki istek için saklanır. Yığın izleme orta eşyası, istek işlenirken oluşan tüm özel durumları yakalayacak ve herhangi bir özel durum oluşursa yanıt olarak geri gönderilen bir yığın izleme oluşturacaktır.
Doğrudan Ring ile çalışmak sıkıcı olabilir, bu nedenle Compojure , Ring'in üzerine detayları soyutlayarak inşa edilmiştir. Uygulama şimdi yönlendirme olarak ifade edilebilir, böylece böyle bir şeye sahip olabilirsiniz:
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojure hala istek / yanıt haritalarıyla çalışıyor, böylece gerektiğinde bunlara her zaman erişebilirsiniz:
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
Bu durumda, {uri: uri} bölümü istek haritasındaki: uri anahtarına erişir ve uri değerini bu değere ayarlar.
Son bileşen, html oluşturmayı kolaylaştıran Hıçkırıktır . Çeşitli html etiketleri, etiket adını temsil eden ilk öğe ve geri kalan kısmı etiketin gövdesi olmak üzere vektörler olarak temsil edilir. "<h2>A header</h2>"
olur [:h2 "A Header"]
. Bir etiketin özellikleri isteğe bağlı bir haritadadır. "<a href='/login'>Log In Page</a>"
olur [:a {:href "/login"} "Log In Page"]
. Html oluşturmak için bir şablon kullanan küçük bir örnek.
(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)))
Kompozit yazarı tarafından şu anda yararlı bulabileceğiniz bazı belgelerin kaba bir taslağının bağlantısı: Compojure Doc