Go to file
Andres Loeh f9b1e7fc50 Switch server interpretation to a datatype for efficiency.
Instead of directly interpreting a server as a `RoutingApplication`,
this change introduces the concept of a `Router`, which is a datatype
with several constructors.

In particular, the type of the `route` function changes from

    route :: Proxy layout -> Server layout -> RoutingApplication

to

    route :: Proxy layout -> IO (RouteResult (Server layout)) -> Router

Most important in practice is the case of the `StaticRouter` constructor
in `Router`. For choices between statically known paths, we can now use
a lookup table to dispatch requests rather than trying each request
individually.

This brings down routing complexity of a common case from
O(n) to O(log n).

Another important change is that the handler that is passed down by
`route` is no longer of type `Server layout`, but of type
`IO (RouteResult (Server layout))`. This means that API constructs
can "delay" checks and failure. For example, `ReqBody` does not have
to fetch the request body and feed it to the handler immediately; it
can instead record these actions in the handler that is passed down.
The code will only be executed at a leaf / endpoint of the API.

This is desired behaviour: We prefer to save work by doing all matching
on static path components first. Furthermore, we get better error codes
by doing so.
2015-06-04 13:07:53 +02:00
scripts Add bump-versions script 2015-05-26 12:18:26 +02:00
servant Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-blaze Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-client Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-docs Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-examples Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-jquery Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-lucid Bump to 0.4.1 2015-05-29 16:24:08 +02:00
servant-server Switch server interpretation to a datatype for efficiency. 2015-06-04 13:07:53 +02:00
.ghci added servant/.ghci 2014-10-31 15:49:05 +01:00
.gitignore Enter via natural transformations 2015-05-03 00:15:35 +02:00
.travis.yml 7.10 changes 2015-04-22 12:27:18 +02:00
README.md tweak README 2015-05-11 10:36:41 +02:00
servant.png Update READMEs 2015-04-20 15:48:37 +02:00
sources.txt Changelog and sources.txt updates 2015-05-02 12:09:00 +02:00

servant

Build Status Coverage Status

servant

These libraries provides a family of combinators to define webservices and automatically generate the documentation and client-side querying functions for each endpoint.

In order to minimize the dependencies depending on your needs, we provide these features under different packages.

  • servant, which contains everything you need to declare a webservice API.
  • servant-server, which lets you implement an HTTP server with handlers for each endpoint of an API.
  • servant-client, which lets you derive automatically Haskell functions that let you query each endpoint of a servant webservice.
  • servant-docs, which lets you generate API docs for your webservice.
  • servant-jquery, which lets you derive Javascript functions (based on jquery) to query your API's endpoints, in the same spirit as servant-client.
  • servant-blaze and servant-lucid provide easy HTML rendering of your data as an HTML content-type "combinator".

Tutorial

We have a tutorial guide that introduces the core types and features of servant. After this article, you should be able to write your first servant webservices, learning the rest from the haddocks' examples.