Popularity
8.3
Stable
Activity
0.0
Stable
63
6
2

Monthly Downloads: 25
Programming language: Haskell
License: BSD 3-clause "New" or "Revised" License
Tags: Network     Http    

http-dispatch alternatives and similar packages

Based on the "http" category.
Alternatively, view http-dispatch alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of http-dispatch or a related project?

Add another 'http' Package

README

HTTP Dispatch

This is the HTTP library I wish I had when first learning Haskell

CircleCI

Available on Hackage: You'll want to use a version at 0.6.2.0 or greater

https://hackage.haskell.org/package/http-dispatch-0.6.2.0

A high level Haskell HTTP client with a friendly and consistent API. This library builds upon the http-client library, providing an (IMO) easier and more intuative API

There are only two types (HTTPRequest and HTTPResponse). Everything else is sugar for constructing these types

Differences from http-client

  • Simple DSL (only two types HTTPRequest and HTTPResponse)
  • Higher level API
  • No exceptions thrown on non 200 status codes
  • Supports TLS out of the box

Differences from wreq

  • Lighter
  • Doesn't require lens package

Motivation

There are already a couple of really good HTTP clients for Haskell (Wreq, HTTP Client), but typically I'd need to go hunting through documentation just to do even the simplest thing (or having to import a different package for https). This is the HTTP library I wish I had when first learning Haskell.

This library strips back everything to be as simple as possible. It will transparently support HTTPS and has a very consistent DSL for making requests.

There are only two types. A HTTPRequest and a HTTPResponse. That's all there is to know about this library.

Some utility functions are provided to make constructing requests easier but it's nothing more than sugar for creating types.

HTTP Request

A HTTP request has a method, url, a list of headers and an optional body. Header is a type synonym for a ByteString pair i.e (S.ByteString, S.ByteString). The body is a strict ByteString.

data HTTPRequest = HTTPRequest {
    method  :: RequestMethod
  , url     :: String
  , headers :: [(S.ByteString, S.ByteString)]
  , body    :: Maybe S.ByteString
} deriving ( Eq, Ord, Show )

HTTP Response

A HTTP response has a status, a list of headers, and a response body. Header is a type synonym for a ByteString pair i.e (S.ByteString, S.ByteString). The body is a strict ByteString.

data HTTPResponse = HTTPResponse {
    responseStatus  :: Int
  , responseHeaders :: [(S.ByteString, S.ByteString)]
  , resposeBody    :: S.ByteString
} deriving ( Eq, Show )

Examples

Some examples to help you get started.

Remember that everything is just sugar for constructing the HTTPRequest type and calling run on it to convert it to a IO HttpResponse.

{-# LANGUAGE OverloadedStrings #-}
module Example

import qualified          Network.HTTP.Dispatch as Dispatch

response :: IO Dispatch.HttpResponse
response = http request where reqeuest = get "http://google.com"

If you have any questions comments or feedback let me know [email protected]