Popularity
8.7
Stable
Activity
0.0
Stable
73
10
2
Monthly Downloads: 152
Programming language: Haskell
License: MIT License
Latest version: v2.0.2
apiary alternatives and similar packages
Based on the "apiary" category.
Alternatively, view apiary alternatives based on common mentions on social networks and blogs.
Do you think we are missing an alternative of apiary or a related project?
README
Apiary
Simple and type safe web framework that can be automatically generate API documentation.
Feature
- small core library and dependencies.
- simple extension system.
- high performance(benchmark: https://github.com/philopon/apiary-benchmark).
- nestable router.
- auto generate API documents.
Web sites using apiary web framework
- find-hackage.dizzy-life.com advanced hackage search
- best-haskell.dizzy-life.com haskell download ranking(dead)
Install
cabal sandbox init
cabal install apiary warp
[Demo](examples/readme.lhs)
> {-# LANGUAGE OverloadedStrings #-}
> {-# LANGUAGE ConstraintKinds #-}
> {-# LANGUAGE TypeOperators #-}
> {-# LANGUAGE QuasiQuotes #-}
> {-# LANGUAGE DataKinds #-}
>
> import Web.Apiary
> import Web.Apiary.Logger
> import Network.Wai.Handler.Warp
> import qualified Data.ByteString as S
>
> main :: IO ()
> main = runApiaryWith (run 3000) (initLogger def) def $ do
~~~~~~~~~~~~~~~~
use logger extension
> [capture|/hello/first::S.ByteString[first name of client.]|]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
route capture QQ.
name::Type[document] = parameter capture
**name = consume greedy
> . ([key|last|] ?? "last name of client" =?: pByteString)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
query parameter filter.
key QQ is simple helper: `[key|foo|] == (Proxy :: Proxy "foo")`.
(??) is add document to query parameter.
> . method GET $ do
~~~~~~~~~~
method filter. you can use non-standard method by
string literal (example: method "HOGE").
> accept "text/plain"
~~~~~~~~~~~~~~~~~~
accept filter: filter by Accept header and set content-type of response.
> . document "plain hello page."
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
add document to action.
> . action $ do
~~~~~~
splice ActionT monad to filter.
> logging "text page is accessed.\n"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
extension action.
> helloAction
> accept "text/html"
> . document "html hello page."
> . action $ do
> logging "html page is accessed.\n"
> bytes "<h1>"
> helloAction
> appendBytes "</h1>"
>
> [capture|/api|] . document "api documentation" . action $ do
> logging "api documentation page is accessed.\n"
> defaultDocumentationAction def
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
auto generated api documentation action.
> helloAction :: Members ["first" := S.ByteString, "last" := Maybe S.ByteString] prms
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prms must have "first" :: S.ByteString
and "last" :: Maybe S.ByteString parameters.
> => ActionT exts prms IO ()
> helloAction = do
> (f, l) <- [params|first, last|]
~~~~~~~~~~~~~~~~~~~~
get parameters. equals to `do { f <- param [key|first|];
l <- param [key|last|] }`
> appendBytes "Hello, "
> appendBytes f
> maybe (return ()) (\a -> appendChar ' ' >> appendBytes a) l
learn more
- Hackage
- [examples](examples/)
- best-haskell
- find-hackage
*Note that all licence references and agreements mentioned in the apiary README section above
are relevant to that project's source code only.