Routering met Compojure
Leer webroutes definiëren en binnenkomende requests met Compojure aan specifieke handlerfuncties koppelen.
Routering met Compojure is een gratis Functioneel programmeren met Clojure en backendontwikkeling op de JVM-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Functioneel programmeren met Clojure en backendontwikkeling op de JVM. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat in totaal 4 lessen.
Wat is webroutering?
Wanneer je een URL in je browser typt, hoe weet een webtoepassing dan welk deel van de code moet worden uitgevoerd?
Daar komt routering om de hoek kijken! Routering is het proces waarbij binnenkomende webverzoeken (zoals het bezoeken van een URL) worden gekoppeld aan specifieke functies of stukjes code die ze afhandelen.
- Het stuurt verkeer.
- Het ordent je toepassing.
- Het maakt URL's betekenisvol.
Maak kennis met Compojure
Compojure is een populaire routeringsbibliotheek voor Clojure-webtoepassingen. Het bouwt voort op Ring, de webtoepassingsspecificatie van Clojure.
Compojure biedt eenvoudige macro's om routes te definiëren, waardoor je URL's eenvoudig aan je handlerfuncties kunt koppelen. Het helpt de structuur van je webtoepassing overzichtelijk en begrijpelijk te houden.
Een eenvoudige GET-route definiëren
Compojure gebruikt macro's zoals GET, POST, PUT en DELETE om routes voor verschillende HTTP-methoden te definiëren. De eenvoudigste is GET voor het ophalen van gegevens.
Zo definieer je een route die reageert op verzoeken naar het basispad /:
(ns my-app.routes
(:require [compojure.core :refer [defroutes GET]]))
(defroutes app-routes
(GET "/" [] "Welcome to Compojure!"))Een Compojure-toepassing uitvoeren
Om onze routes actief te maken, hebben we een webserver nodig. We gebruiken http-kit, een eenvoudige en snelle server. We wikkelen onze app-routes in een functie en starten de server.
Voer dit volledige voorbeeld uit. Open vervolgens je browser op 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)Padparameters vastleggen
Vaak moet je dynamische delen uit een URL halen, zoals een item-ID of gebruikersnaam. Met Compojure kun je dit doen met padparameters, die worden aangegeven met een dubbele punt (:) gevolgd door de parameternaam.
Deze parameters zijn vervolgens als argumenten beschikbaar in je handlerfunctie.
(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)))Verschillende HTTP-methoden afhandelen
Webtoepassingen halen niet alleen gegevens op (GET). Ze maken (POST), werken bij (PUT) en verwijderen (DELETE) ook bronnen. Compojure biedt voor elk hiervan specifieke macro's.
Je kunt verschillend gedrag definiëren voor hetzelfde URL-pad, afhankelijk van de gebruikte HTTP-methode.
(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)))Routes groeperen met `routes`
Naarmate je toepassing groeit, krijg je veel routes. Met Compojure's macro routes kun je ze logisch groeperen. Hierdoor wordt je routeringsdefinitie overzichtelijker en beter leesbaar.
Vervolgens kun je deze gegroepeerde routes combineren in je hoofdhandler van de toepassing.
(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"))Routes nesten voor structuur
Voor een nog betere ordening, vooral bij API-versies of deelgebieden, kun je routes nesten. Met Compojure kun je een gemeenschappelijk padvoorvoegsel voor een groep routes definiëren met context.
Hierdoor ontstaat een duidelijke hiërarchie voor de eindpunten van je toepassing, zoals /api/v1/users of /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"))De volgorde van routevergelijking is belangrijk
Compojure verwerkt routes in de volgorde waarin ze zijn gedefinieerd. De eerste route die overeenkomt met het pad en de HTTP-methode van een binnenkomend verzoek, wordt gebruikt.
- Definieer specifiekere routes VÓÓR algemene routes.
- Zo moet
/users/newvóór/users/:idkomen.
Anders kan /users/new ten onrechte overeenkomen met /users/:id, waarbij 'new' als een ID wordt behandeld.
Snelle controle: Compojure-routes
Bekijk de volgende Compojure-route-definities:
(defroutes my-app
(GET "/products/latest" [] "Latest Products")
(GET "/products/:id" [id] (str "Product ID: " id))
(GET "/" [] "Homepage"))Welke van de volgende beweringen over deze routes zijn WAAR?
Samenvatting: routeren met Compojure
In deze les heb je de basis van webroutering geleerd en gezien hoe Compojure dit voor Clojure-toepassingen vereenvoudigt:
- Routering koppelt URL's aan handlerfuncties.
- Compojure biedt macro's (
GET,POSTenzovoort) om routes te definiëren. - Je kunt padparameters zoals
:idvastleggen. - Routes kunnen worden gegroepeerd met
routesen genest metcontext. - De volgorde is belangrijk: specifieke routes moeten vóór algemene routes komen.
Je bent nu klaar om duidelijke, overzichtelijke routes voor je Clojure-webservices te definiëren!
Leer Clojure met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Routering met Compojure” gratis?
Ja — de volledige tekst van “Routering met Compojure” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat in totaal 4 lessen.
Wat leer ik in “Routering met Compojure”?
Leer webroutes definiëren en binnenkomende requests met Compojure aan specifieke handlerfuncties koppelen. Je oefent met Functioneel programmeren met Clojure en backendontwikkeling op de JVM door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Functioneel programmeren met Clojure en backendontwikkeling op de JVM te beginnen?
Ervaring vooraf is niet nodig. Functioneel programmeren met Clojure en backendontwikkeling op de JVM op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Routering met Compojure”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Functioneel programmeren met Clojure en backendontwikkeling op de JVM?
Ja. Elke les over Functioneel programmeren met Clojure en backendontwikkeling op de JVM bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Inleiding tot Ring en HTTP-basisprincipes
- Routering met Compojure
- Requests en responses afhandelen
- Ring-middleware grondig behandeld