Compojure ไม่ใช่กรอบงานที่สมบูรณ์สำหรับการพัฒนาเว็บแอปพลิเคชันอีกต่อไป ตั้งแต่การเปิดตัว 0.4 คอมโพสิตได้ถูกแยกออกเป็นหลายโครงการ
Ringให้พื้นฐานโดยการแยกคำขอ HTTP และกระบวนการตอบกลับออกไป แหวนจะแยกคำขอที่เข้ามาและสร้างแผนที่ที่มีทุกส่วนของคำขอเช่น uri ชื่อเซิร์ฟเวอร์และคำขอวิธีการ แอปพลิเคชันจะจัดการกับคำร้องขอและขึ้นอยู่กับคำร้องขอสร้างการตอบกลับ การตอบสนองจะแสดงเป็นแผนที่ที่มีปุ่มต่อไปนี้: สถานะส่วนหัวและร่างกาย ดังนั้นแอปพลิเคชันที่เรียบง่ายจะมีลักษณะดังนี้:
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
อีกส่วนหนึ่งของแหวนเป็นแนวคิดของเครื่องกลาง นี่คือรหัสที่อยู่ระหว่างตัวจัดการและคำขอขาเข้าและ / หรือการตอบสนองขาออก บางเครื่องในมิดเดิลแวร์รวมถึงเซสชันและสแต็ค มิดเดิลแวร์ของเซสชันจะเพิ่ม: เซสชันคีย์ลงในแผนผังคำขอที่มีข้อมูลเซสชันทั้งหมดสำหรับผู้ใช้ที่ทำการร้องขอ หาก: คีย์เซสชันแสดงอยู่ในแผนที่ตอบกลับจะถูกเก็บไว้สำหรับคำขอถัดไปที่ทำโดยผู้ใช้ปัจจุบัน ในขณะที่การติดตามสแต็กมิด - แวร์จะจับภาพข้อยกเว้นใด ๆ ที่เกิดขึ้นขณะประมวลผลการร้องขอและสร้างการติดตามสแต็กที่ส่งกลับเป็นการตอบสนองหากมีข้อยกเว้นเกิดขึ้น
การทำงานกับ Ring โดยตรงอาจทำให้เบื่อได้ดังนั้นCompojureจึงถูกสร้างขึ้นจากส่วนบนของ Ring เพื่อแยกรายละเอียดออกไป ตอนนี้แอปพลิเคชันสามารถแสดงในแง่ของการกำหนดเส้นทางเพื่อให้คุณมีสิ่งนี้:
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojure ยังคงทำงานกับแผนที่คำขอ / ตอบสนองเพื่อให้คุณสามารถเข้าถึงได้ตลอดเวลาหากต้องการ:
(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)))
นี่คือลิงค์ไปยังร่างคร่าวๆของเอกสารบางอย่างที่กำลังถูกเขียนโดยผู้เขียน Compojure ซึ่งคุณอาจพบว่ามีประโยชน์: Compojure Doc