Skip to content
Haskell Shell
Branch: master
Clone or download
Pull request Compare This branch is 116 commits ahead, 167 commits behind new-impl.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
servant-example
servant-pool
servant-postgresql
servant-response
servant-scotty
servant
.travis.yml
README.md
build.sh
getting-started.md
init.sh
toc.hs
tutorial.md

README.md

servant

servant is at its core a type-safe and very extensible library for defining REST-y webservices around some core "database operations", in just a few very simple lines, e.g:

mkResource "users" pgsqlcontext pgexceptions
  & addWith Users.add
  & listAllWith Users.view
  & deleteWith Users.delete

which can then be turned into a scotty webservice by calling runResource (from servant-scotty -- the only backend we have for now) on it.

Documentation

Extensibility

I've rewritten servant a couple of times because there's no point in tying it to a particular web framework or database backend (and it was tied to scotty, in previous rewrites). I've kept the type tricks but worked hard enough to completely separate the resource description bits from the parts that actually are about setting up a webservice just from a description or turning results into proper json responses and what not.

In addition to the standard REST operations provided through the various Prelude modules in the servant packages, you can define your own in a simple and type-safe way.

Also, right now, I'm focusing on our use cases at Zalora, where we need pooling support on top of /PostgreSQL/ connections, and tend to write web apps using scotty. Nothing keeps you from writing a "backend" for your favorite web framework, it would most likely be quite similar to the scotty one, so you can just look at its code. However, if I don't have a write up yet about how that should be done by the time you want to do that, I gladly encourage you to shoot me an email. The documentation links above should however help a lot.

You can’t perform that action at this time.