From 55eb020d10e9134ea26bbf72c649d5079f7e7283 Mon Sep 17 00:00:00 2001 From: Alp Mestanogullari Date: Mon, 8 Dec 2014 10:56:02 +0100 Subject: [PATCH] polish up cabal file, add a README --- README.md | 25 ++++++++++++++ servant.cabal | 93 +++++++++++++++++++++++++++++++++++++++++++++++--- servant.png | Bin 0 -> 27039 bytes 3 files changed, 114 insertions(+), 4 deletions(-) create mode 100644 README.md create mode 100644 servant.png diff --git a/README.md b/README.md new file mode 100644 index 00000000..7d978b8a --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# servant + +[![Build Status](https://secure.travis-ci.org/haskell-servant/servant.svg)](http://travis-ci.org/haskell-servant/servant) + +![servant](https://raw.githubusercontent.com/haskell-servant/servant/master/servant.png) + +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 and *implement* an HTTP server with handlers for each endpoint. +- `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`. + +## Getting started + +We've written a [Getting Started](http://haskell-servant.github.io/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](http://github.com/haskell-servant) package - [docs](http://haskell-servant.github.io/servant/) +- (Haskell) client-side function generation with [servant-client](http://github.com/haskell-servant/servant-client) - [docs](http://haskell-servant.github.io/servant-client/) +- (Javascript) client-side function generation with [servant-jquery](http://github.com/haskell-servant/servant-jquery) - [docs](http://haskell-servant.github.io/servant-jquery/) +- API docs generation with [servant-docs](http://github.com/haskell-servant/servant-docs) - [docs](http://haskell-servant.github.io/servant-docs/) diff --git a/servant.cabal b/servant.cabal index d163c6a8..1bf80bfe 100644 --- a/servant.cabal +++ b/servant.cabal @@ -1,7 +1,89 @@ name: servant version: 0.2 --- synopsis: --- description: +synopsis: A family of combinators for defining webservices APIs and serving them +description: + A family of combinators for defining webservices APIs and serving them + . + You can learn about the basic in guide. + . + Here's a runnable example, with comments that defines a dummy API and + implements a webserver that serves this API. You can find it too. + . + > {-# LANGUAGE DataKinds #-} + > {-# LANGUAGE PolyKinds #-} + > {-# LANGUAGE TypeFamilies #-} + > {-# LANGUAGE DeriveGeneric #-} + > {-# LANGUAGE TypeOperators #-} + > {-# LANGUAGE OverloadedStrings #-} + > + > import Data.Aeson + > import Data.Monoid + > import Data.Proxy + > import Data.Text + > import GHC.Generics + > import Network.Wai + > import Network.Wai.Handler.Warp + > + > import Servant + > + > -- * Example + > + > -- | A greet message data type + > newtype Greet = Greet { msg :: Text } + > deriving (Generic, Show) + > + > instance FromJSON Greet + > instance ToJSON Greet + > + > -- API specification + > type TestApi = + > -- GET /hello/:name?capital={true, false} + -- returns a Greet as JSON + > "hello" :> Capture "name" Text :> QueryParam "capital" Bool :> Get Greet + > + > -- POST /greet with a Greet as JSON in the request body, + > -- returns a Greet as JSON + > :<|> "greet" :> ReqBody Greet :> Post Greet + > + > -- DELETE /greet/:greetid + > :<|> "greet" :> Capture "greetid" Text :> Delete + > + > testApi :: Proxy TestApi + > testApi = Proxy + > + > -- Server-side handlers. + > -- + > -- There's one handler per endpoint, which, just like in the type + > -- that represents the API, are glued together using :<|>. + > -- + > -- Each handler runs in the 'EitherT (Int, String) IO' monad. + > server :: Server TestApi + > server = helloH :<|> postGreetH :<|> deleteGreetH + > + > where helloH name Nothing = helloH name (Just False) + > helloH name (Just False) = return . Greet $ "Hello, " <> name + > helloH name (Just True) = return . Greet . toUpper $ "Hello, " <> name + > + > postGreetH greet = return greet + > + > deleteGreetH _ = return () + > + > -- Turn the server into a WAI app. 'serve' is provided by servant, + > -- more precisely by the Servant.Server module. + > test :: Application + > test = serve testApi server + > + > -- Run the server. + > -- + > -- 'run' comes from Network.Wai.Handler.Warp + > runTestServer :: Port -> IO () + > runTestServer port = run port test + > + > -- Put this all to work! + > main :: IO () + > main = runTestServer 8001 +homepage: http://haskell-servant.github.io/ +Bug-reports: http://github.com/haskell-servant/servant/issues license: BSD3 license-file: LICENSE author: Alp Mestanogullari, Sönke Hahn, Julian K. Arni @@ -11,6 +93,9 @@ category: Web build-type: Simple cabal-version: >=1.10 tested-with: GHC >= 7.8 +source-repository head + type: git + location: http://github.com/haskell-servant/servant.git library exposed-modules: @@ -52,12 +137,12 @@ library , warp hs-source-dirs: src default-language: Haskell2010 - ghc-options: -O0 -Wall + ghc-options: -Wall executable greet main-is: greet.hs hs-source-dirs: example - ghc-options: -O0 -Wall + ghc-options: -Wall default-language: Haskell2010 build-depends: base diff --git a/servant.png b/servant.png new file mode 100644 index 0000000000000000000000000000000000000000..caec4f60d34f5ce49d2b255a4e4564ca3a316df4 GIT binary patch literal 27039 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