# purescheme-wai-routing-core [![Build Status](https://travis-ci.org/purescheme/purescheme-wai-routing-core.svg?branch=master)](https://travis-ci.org/purescheme/purescheme-wai-routing-core) [![Hackage](https://img.shields.io/hackage/v/purescheme-wai-routing-core)](http://hackage.haskell.org/package/purescheme-wai-routing-core) *The goal of purescheme is make a simple framework for building fast microservices and web applications in haskell.* This module provides simple routing functions for create rest APIs on top of a WAI server. ## Getting Started Minimal Example to run a helloworld using Warp server: ```haskell {-# LANGUAGE OverloadedStrings #-} module Main where import Network.Wai.Routing.Purescheme.Core import Network.HTTP.Types (status200, StdMethod(..), hContentType) import Network.Wai.Handler.Warp (run) import Network.Wai (responseLBS, Application) main :: IO () main = run 8080 api api :: Application api = path "hello" $ method GET $ complete $ responseLBS status200 [(hContentType, "text/html")] "

Hellow World!

" ``` ## Overview This module provides simple routing functions that works on top of "Network.Wai" applications. The basic idea is provides functions that modifies an @"Application" in order to match certain rules. It is inspired on akka http server Routing DSL. ## User Guide The API is divided in several modules by its functionality: - `Network.Wai.Routing.Purescheme.Core.Basic` provides the basic types and functionality including how to complete a request and exception handling. - `Network.Wai.Routing.Purescheme.Core.Path` routing functions that matches with the Path of the URI. - `Network.Wai.Routing.Purescheme.Core.Query` routing functions to extract parameters from the query part of the URI. - `Network.Wai.Routing.Purescheme.Core.Method` routing functions based on http method. - `Network.Wai.Routing.Purescheme.Core.Entity` routing and manipulation API related with Entity in the request and the response. Useful for content negotiation and serialization of entities. - `Network.Wai.Routing.Purescheme.Core.Entity.Json` concrete functions to operate on JSON encoding entities based on Aeson library. A complete example can be found in the [app](https://github.com/purescheme/purescheme-wai-routing-core/tree/master/app) folder. ## Why There are many routing frameworks for Haskell but they usually are: - They come with their own Monads or exoteric strategics to build routes. - Some of them are not using the type system properly So, as Haskell is totally functional, and, based on the simplicity of an Wai `Application` (which is basically a function that converts requests to responses), why not create functions on top of Wai `Application` that provides a functional way to implement RESTful APIs? ## Status Currently the API is totally functional but the status is considered Alpha. That means, the API can change in further release until it reachs the beta status. ## Feedback are welcome! Please, if you feel that some functionallity is missing or something can be improve, post an [issue](https://github.com/purescheme/purescheme-wai-routing-core/issues) or contact the author.