This seed repo provides a collection of Clojure libraries patterned together to get you up and running in less than one minute with a solid Clojure REST-ful Web Server.
It is designed to offer you a great starting point for your project.
leiningen and a modern JDK installed.
choose a name for your project. e.g., mycoolapp
Then it's just a matter of entering the following commands into your terminal:
## Create your project
lein new moarweba mycoolapp
cd mycoolapp
## Spin it up
export PORT=8080
lein repl
Congratulations! You have a running clojure web server.
in development:
browse to localhost:8080 in your browser, or
> curl -X GET http://localhost:8080
if that's your thing.
in production:
cd mycoolapp
lein uberjar
java -jar target/mycoolapp-< VERSION >-standalone.jar start
A fully RESTful Web Server, of course!
It's got:
- an HTTP(s) server
- Routing
- authentication and authorization.
- the stub for a backend (database) connection
- some other utility stuff to make life easier
Moarweba rigs up the following great Clojure libraries for you:
included Library | Reason |
---|---|
http-kit | a high-performance http server with WebSocket support. |
Ring | Beautiful HTTP-as-API abstraction. Used extensively throughout the Clojure community. |
liberator | Define Resources. Handle Requests exactly how you want to. |
bidi | Routing as Data Structures. |
buddy-auth, buddy-hashers, and buddy-sign | because Security isn't an afterthought. |
cheshire | because JSON |
No.
You can keep all, some, or none of these libraries as you progress in building up your project. Your application will dictate what to keep and what to strip out, but these included web libraries are generally useful regardless of the domain you are in.
ok, peek into ./src/mycoolapp
and you'll see the following files:
This is the actual http server. It has some stuff to handle http requests, notably some Ring-style middleware, which has become a de-facto standard for handling web requests.
You shouldn't need to mess with this file too much.
At the very bottom though, the last line, you'll find
...
(reload) ;; Comment out this line BEFORE pushing to production.
You can %Eval
the file server.clj
in development, and this will reload the server.
Remember to comment out (reload)
before pushing to production so the -main
function will load properly and be picked up by java -jar <myapp>.jar start &
this is really an implementation of liberator for defining your REST resources combined with bidi for routing. Define all of your URL endpoints in here, and use the various defresources
to handle them appropriately.
I'm not imposing any opinions about what backend you should use. Some of you like databases. Some of you don't. If you do, here's a good starting place to put your datastore stuff.
Utility stuff. Yep.
I write a bunch of web applications. Plus, I like Clojure. A lot.
What has emerged is this loose collection of libraries and patterns that I've put together to quickly get up and running to get stuff done.
This is primarily the basic structure I was repeatedly copying over from project to project.
Distributed without license restrictions to a free and open world with the hope that it is useful.
Copyright © 2017 tuddman