0Pricing
Clojure Functional Programming & JVM Backend Development · Pelajaran

Perutean dengan Compojure

Pelajari cara menentukan rute web dan mencocokkan permintaan masuk dengan fungsi penangan tertentu menggunakan Compojure

Perutean dengan Compojure adalah pelajaran Clojure Functional Programming & JVM Backend Development gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Clojure Functional Programming & JVM Backend Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Clojure Functional Programming & JVM Backend Development mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

What is Web Routing?

When you type a URL into your browser, how does a web application know which part of its code to run?

This is where routing comes in! Routing is the process of mapping incoming web requests (like visiting a URL) to specific functions or pieces of code that handle them.

  • It directs traffic.
  • It organizes your application.
  • It makes URLs meaningful.

Introducing Compojure

Compojure is a popular routing library for Clojure web applications. It builds on top of Ring, Clojure's web application specification.

Compojure provides simple macros to define routes, making it easy to connect URLs to your handler functions. It helps keep your web application's structure clean and understandable.

Defining a Simple GET Route

Compojure uses macros like GET, POST, PUT, and DELETE to define routes for different HTTP methods. The simplest is GET for fetching data.

Here's how you define a route that responds to requests at the root path /:

(ns my-app.routes
  (:require [compojure.core :refer [defroutes GET]]))

(defroutes app-routes
  (GET "/" [] "Welcome to Compojure!"))

Running a Compojure Application

To make our routes active, we need a web server. We'll use http-kit, a simple and fast server. We wrap our app-routes in a function and start the server.

Try running this complete example. Then open your browser to http://localhost:3000!

(ns my-app.core
  (:require [compojure.core :refer [defroutes GET]]
            [org.httpkit.server :refer [run-server]]))

(defroutes app-routes
  (GET "/" [] "Hello from Compojure!"))

(defn -main [& args]
  (println "Starting server on port 3000...")
  (run-server app-routes {:port 3000}))

(-main)

Capturing Path Parameters

Often, you need to extract dynamic parts from a URL, like an item ID or a username. Compojure lets you do this using path parameters, denoted by a colon (:) followed by the parameter name.

These parameters are then available within your handler function as arguments.

(ns my-app.routes
  (:require [compojure.core :refer [defroutes GET]]))

(defroutes user-routes
  (GET "/users/:id" [id] 
    (str "Fetching user: " id))
  (GET "/products/:name" [name] 
    (str "Product details for: " name)))

Handling Different HTTP Methods

Web applications don't just fetch data (GET). They also create (POST), update (PUT), and delete (DELETE) resources. Compojure provides specific macros for each.

You can define different behaviors for the same URL path based on the HTTP method used.

(ns my-app.methods
  (:require [compojure.core :refer [defroutes GET POST PUT DELETE]]))

(defroutes item-api
  (GET "/items/:id" [id] (str "Get item " id))
  (POST "/items" [] "Create a new item")
  (PUT "/items/:id" [id] (str "Update item " id))
  (DELETE "/items/:id" [id] (str "Delete item " id)))

Grouping Routes with `routes`

As your application grows, you'll have many routes. Compojure's routes macro lets you group them logically. This makes your routing definition more organized and readable.

You can then combine these grouped routes into your main application handler.

(ns my-app.groups
  (:require [compojure.core :refer [defroutes GET POST routes]]))

(def user-routes
  (routes
    (GET "/users" [] "List all users")
    (POST "/users" [] "Create a user")))

(def product-routes
  (routes
    (GET "/products" [] "List products")
    (GET "/products/:id" [id] (str "Product details for " id))))

(defroutes main-app
  user-routes
  product-routes
  (GET "/" [] "Homepage"))

Nesting Routes for Structure

For even better organization, especially with API versions or sub-sections, you can nest routes. Compojure allows you to define a common path prefix for a group of routes using context.

This creates a clear hierarchy for your application's endpoints, like /api/v1/users or /admin/dashboard.

(ns my-app.nested
  (:require [compojure.core :refer [defroutes GET context]]))

(defroutes api-v1-routes
  (context "/api/v1" []
    (GET "/users" [] "API v1: List users")
    (GET "/products" [] "API v1: List products")))

(defroutes admin-routes
  (context "/admin" []
    (GET "/dashboard" [] "Admin Dashboard")
    (GET "/settings" [] "Admin Settings")))

(defroutes all-app-routes
  api-v1-routes
  admin-routes
  (GET "/" [] "Main site"))

Route Matching Order Matters

Compojure processes routes in the order they are defined. The first route that matches an incoming request's path and HTTP method will be used.

  • Define more specific routes BEFORE general ones.
  • For example, /users/new should come before /users/:id.

Otherwise, /users/new might be incorrectly matched by /users/:id, with 'new' being treated as an ID.

Quick Check: Compojure Routes

Consider the following Compojure route definitions:

(defroutes my-app
  (GET "/products/latest" [] "Latest Products")
  (GET "/products/:id" [id] (str "Product ID: " id))
  (GET "/" [] "Homepage"))

Which of the following statements are TRUE about these routes?

Recap: Routing with Compojure

In this lesson, you've learned the essentials of web routing and how Compojure simplifies it for Clojure applications:

  • Routing maps URLs to handler functions.
  • Compojure provides macros (GET, POST, etc.) to define routes.
  • You can capture path parameters like :id.
  • Routes can be grouped with routes and nested with context.
  • Order matters: specific routes must come before general ones.

You're now ready to define clear, organized routes for your Clojure web services!

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Perutean dengan Compojure” gratis?

Ya — teks lengkap “Perutean dengan Compojure” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Clojure Functional Programming & JVM Backend Development, upgrade ke CoddyKit PRO. Kursus Clojure Functional Programming & JVM Backend Development mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Perutean dengan Compojure”?

Pelajari cara menentukan rute web dan mencocokkan permintaan masuk dengan fungsi penangan tertentu menggunakan Compojure Kamu berlatih Clojure Functional Programming & JVM Backend Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Clojure Functional Programming & JVM Backend Development?

Tidak diperlukan pengalaman sebelumnya. Clojure Functional Programming & JVM Backend Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Perutean dengan Compojure” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Clojure Functional Programming & JVM Backend Development ini?

Ya. Setiap pelajaran Clojure Functional Programming & JVM Backend Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengenalan Ring dan Dasar-Dasar HTTP
  2. Perutean dengan Compojure
  3. Menangani Permintaan dan Respons
  4. Middleware Ring Secara Mendalam
← Kembali ke Clojure Functional Programming & JVM Backend Development