Compojure tidak lagi merupakan kerangka kerja yang lengkap untuk mengembangkan aplikasi web. Sejak rilis 0.4, compojure telah dipecah menjadi beberapa proyek.
Ring menyediakan fondasi dengan mengabstraksi permintaan HTTP dan proses respons. Dering akan menguraikan permintaan yang masuk dan menghasilkan peta yang berisi semua bagian permintaan seperti uri, nama server dan metode permintaan. Aplikasi kemudian akan menangani permintaan dan berdasarkan permintaan menghasilkan respons. Respons direpresentasikan sebagai peta yang berisi kunci berikut: status, header, dan tubuh. Jadi aplikasi sederhana akan terlihat seperti:
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
Satu bagian lain dari Ring adalah konsep middle-ware. Ini adalah kode yang berada di antara pawang dan permintaan masuk dan / atau respons keluar. Beberapa perangkat bawaan yang dibangun termasuk sesi dan stacktrace. Perangkat tengah sesi akan menambahkan: kunci sesi ke peta permintaan yang berisi semua info sesi untuk pengguna yang membuat permintaan. Jika kunci: sesi ada di peta respons, itu akan disimpan untuk permintaan berikutnya yang dibuat oleh pengguna saat ini. Sementara stack stack middle-ware akan menangkap setiap pengecualian yang terjadi saat memproses permintaan dan menghasilkan jejak stack yang dikirim kembali sebagai respons jika ada pengecualian yang terjadi.
Bekerja secara langsung dengan Ring bisa membosankan, jadi Compojure dibangun di atas Ring yang mengaburkan detailnya. Aplikasi sekarang dapat diekspresikan dalam hal perutean sehingga Anda dapat memiliki sesuatu seperti ini:
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojure masih bekerja dengan peta permintaan / respons sehingga Anda selalu dapat mengaksesnya jika diperlukan:
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
Dalam hal ini bagian {uri: uri} mengakses kunci: uri di peta permintaan dan menetapkan uri ke nilai itu.
Komponen terakhir adalah Hiccup yang membuat menghasilkan html lebih mudah. Berbagai tag html direpresentasikan sebagai vektor dengan elemen pertama yang mewakili nama tag dan sisanya menjadi badan tag. "<h2>A header</h2>"
menjadi [:h2 "A Header"]
. Atribut tag ada di peta opsional. "<a href='/login'>Log In Page</a>"
menjadi [:a {:href "/login"} "Log In Page"]
. Berikut ini adalah contoh kecil menggunakan templat untuk menghasilkan 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)))
Berikut ini tautan ke draf kasar beberapa dokumentasi yang saat ini sedang ditulis oleh penulis compojure yang mungkin berguna bagi Anda: Compojure Doc