This library lets you automatically derive Haskell functions that let you query each endpoint of a servant webservice.
Example
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
import Data.Proxy
import Data.Text
import Network.HTTP.Client (newManager, defaultManagerSettings)
import Servant.API
import Servant.Client
type Book = Text
type MyApi = "books" :> Get '[JSON] [Book] -- GET /books
:<|> "books" :> ReqBody '[JSON] Book :> Post '[JSON] Book -- POST /books
myApi :: Proxy MyApi
myApi = Proxy
-- 'client' allows you to produce operations to query an API from a client.
postNewBook :: Book -> ClientM Book
getAllBooks :: ClientM [Book]
(getAllBooks :<|> postNewBook) = client myApi
main :: IO ()
main = do
manager' <- newManager defaultManagerSettings
res <- runClientM getAllBooks (mkClientEnv manager' (BaseUrl Http "localhost" 8081 ""))
case res of
Left err -> putStrLn $ "Error: " ++ show err
Right books -> print books
ToStreamGenerator definition changed, so it’s possible to write an instance
for conduits.
-class ToStreamGenerator f a where
- toStreamGenerator :: f a -> StreamGenerator a
+class ToStreamGenerator a b | a -> b where
+ toStreamGenerator :: a -> StreamGenerator b
servant-client-core Add hoistClient to HasClient.
Just like hoistServer allows us to change the monad in which request handlers
of a web application live in, we also have hoistClient for changing the monad
in which client functions live.
Read tutorial section for more information.
(#936)
servant-client Add more constructors to RequestBody, including
RequestBodyStream.
Note: we are looking for http-library agnostic API,
so the might change again soon.
Tell us which constructors are useful for you!
(#913)
Add MonadThrow and MonadCatch instances for ClientM
0.9
BACKWARDS INCOMPATIBLE: client now returns a ClientM which is a Reader for
BasicEnv. BasicEnv comprises the HttpManager and BaseUrl that have had to be
passed to each method returned by client.
0.7.1
Support GHC 8.0
ServantError has an Eq instance now.
0.6
client no longer takes BaseUrl and Manager arguments. Instead, each function returned by client requires these two arguments.
0.5
Use the text package instead of String.
Support for the HttpVersion, IsSecure, RemoteHost and Vault combinators
Added support for path on BaseUrl.
client now takes an explicit Manager argument.
Use http-api-data instead of Servant.Common.Text
Client functions now consider any 2xx successful.
Remove matrix params.
Added support for Basic authentication
Add generalized authentication support via the AuthClientData type family and
AuthenticateReq data type
0.4.1
The HasClient instance for Delete cts () now does not care at all about content types provided.
0.4
Delete now is like Get, Post, Put, and Patch and returns a response body
Support content-type aware combinators and Accept/Content-type headers
Added a lot of tests
Support multiple concurrent threads
Use ServantError to report Errors instead of String
Make the clients for Raw endpoints return the whole Response value (to be able to access response headers for example)
Support for PATCH
Make () instances expect No Content status code, and not try to decode body.