All Projects → lukewestby → elm-http-extra

lukewestby / elm-http-extra

Licence: MIT license
REPUBLISHED AS lukewestby/elm-http-builder FOR 0.17

Programming Languages

elm
856 projects
javascript
184084 projects - #8 most used programming language
shell
77523 projects

Republished as elm-http-builder for 0.17


elm-http-extra

ICARE Build Status

Chainable functions for building HTTP requests and composable functions for handling responses.

Need help? Join the #http channel in the Elm Slack!

Thanks to @fredcy, @rileylark, and @etaque for the original discussion of the API

Example

In this example, we expect a successful response to be JSON array of strings, like:

["hello", "world", "this", "is", "the", "best", "json", "ever"]

and an error response might have a body which just includes text, such as the following for a 404 error:

Not Found.

We'll use HttpExtra.jsonReader and a Json.Decode.Decoder to parse the successful response body and HttpExtra.stringReader to accept a string body on error without trying to parse JSON.

import Time
import Http.Extra as HttpExtra exposing (..)
import Json.Decode as Json


itemsDecoder : Json.Decoder (List String)
itemsDecoder =
  Json.list Json.string


addItem : String -> Task (HttpExtra.Error String) (HttpExtra.Response (List String))
addItem item =
  HttpExtra.post "http://example.com/api/items"
    |> withStringBody ("{ \"item\": \"" ++ item ++ "\" }")
    |> withHeader "Content-Type" "application/json"
    |> withTimeout (10 * Time.second)
    |> withCredentials
    |> send (jsonReader itemsDecoder) stringReader

Contributing

I'm happy to receive any feedback and ideas for about additional features. Any input and pull requests are very welcome and encouraged. If you'd like to help or have ideas, get in touch with me at @luke_dot_js on Twitter or @luke in the elmlang Slack!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].