f9b1e7fc50
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. |
||
---|---|---|
.. | ||
example | ||
src | ||
test | ||
CHANGELOG.md | ||
default.nix | ||
LICENSE | ||
README.md | ||
servant-server.cabal | ||
Setup.hs |
servant-server
This library lets you implement an HTTP server with handlers for each endpoint of a servant API, handling most of the boilerplate for you.
Getting started
We've written a Getting Started 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.
Repositories and Haddocks
- The core servant package - docs
- Implementing an HTTP server for a webservice API with servant-server - docs
- (Haskell) client-side function generation with servant-client - docs
- (Javascript) client-side function generation with servant-jquery - docs
- API docs generation with servant-docs - docs