Start building your server-side apps in an hour
Web development in Clojure is just like everything else: you build up complex behavior from simple parts. This course builds a TODO list app from scratch, explaining the important concepts, and deploying it to a cloud service. It includes:
- The parts of Ring and how they work together.
- Creating a good development workflow.
- Responding to different HTTP request methods.
- Adapting to browser limitations.
- Generating HTML.
- Storing data in a database.
- Deploying the server to Heroku.
This course does not cover:
Check out what people are saying
"Your Web Development in Clojure course really made things click for me. It gave me just what I needed to stop just researching and get started on a project."
Web Development in Clojure
Want this course?
Love it or leave it guarantee
If you don't learn as much from this course as you thought, just ask for a refund within 30 days and I'll give you your money back.
1. Let's get a server up and running in the cloud
Have you ever wanted to build a web app in Clojure? Have you wondered how to get started? The first part of this course guides you through building a simple web app and deploying it to Heroku, a cloud host.
If you program the web in Clojure, you probably use Ring. Even if you don’t, your server is likely Ring compatible.
Ring has a small SPEC. It’s centered around defining the keys one can expect in the request and response maps. And the exact names for keywords are easy to forget.
I don’t want to forget. I use Ring often enough that I want a quick reference. A while ago, I printed out a quick summary of the keys for the request and response maps and hung it on the wall behind my monitor. I refer to it frequently.
If you program the web in Clojure, you might appreciate this printout. If you’re learning, it could be an invaluable reference.
One change in Ring 1.3 is very significant: the specification is shorter. It’s simpler. Three keys were deprecated in the Ring request map (
:character-encoding). These keys were unnecessary because their values were in the headers, which are also in the Ring request. Equivalent utility functions have been added for pulling the data out of the headers.
Why is this important? While many libraries get more complex and overburdened, it is refreshing to see a library going in the correct direction of shedding complexity. It does not significantly impact application development. Nor does it reduce the already low barrier to entry. Still, I welcome this kind of change.
Ring is the central specification that ties most of the Clojure web ecosystem together.The spec should be minimal. And a mark of good software is that it models the problem very closely without unnecessary abstraction. Ring merely defines a common format (using Clojure data structures) that mirrors the text-based HTTP message format. That’s why Ring has worked so well thus far and why it is appreciated in Clojure.