lukewestby / elm-http-builder / HttpBuilder

Extra helpers for more easily building Http requests that require greater configuration than what is provided by elm/http out of the box.

Start a request


type alias RequestBuilder msg =
{ method : String
, headers : List Http.Header
, url : String
, body : Http.Body
, expect : Http.Expect msg
, timeout : Maybe Basics.Float
, withCredentials : Basics.Bool
, tracker : Maybe String 
}

A type for chaining request configuration

get : String -> RequestBuilder ()

Start building a GET request with a given URL

get "https://example.com/api/items/1"

post : String -> RequestBuilder ()

Start building a POST request with a given URL

post "https://example.com/api/items"

put : String -> RequestBuilder ()

Start building a PUT request with a given URL

put "https://example.com/api/items/1"

patch : String -> RequestBuilder ()

Start building a PATCH request with a given URL

patch "https://example.com/api/items/1"

delete : String -> RequestBuilder ()

Start building a DELETE request with a given URL

delete "https://example.com/api/items/1"

options : String -> RequestBuilder ()

Start building a OPTIONS request with a given URL

options "https://example.com/api/items/1"

trace : String -> RequestBuilder ()

Start building a TRACE request with a given URL

trace "https://example.com/api/items/1"

head : String -> RequestBuilder ()

Start building a HEAD request with a given URL

head "https://example.com/api/items/1"

Configure request properties

withHeader : String -> String -> RequestBuilder msg -> RequestBuilder msg

Add a single header to a request

get "https://example.com/api/items/1"
    |> withHeader "Content-Type" "application/json"

withHeaders : List ( String, String ) -> RequestBuilder msg -> RequestBuilder msg

Add many headers to a request

get "https://example.com/api/items/1"
    |> withHeaders [ ( "Content-Type", "application/json" ), ( "Accept", "application/json" ) ]

withBody : Http.Body -> RequestBuilder msg -> RequestBuilder msg

Add an Http.Body to the request

post "https://example.com/api/save-text"
    |> withBody (Http.stringBody "text/plain" "Hello!")

withStringBody : String -> String -> RequestBuilder msg -> RequestBuilder msg

Convenience function for adding a string body to a request

post "https://example.com/api/items/1"
    |> withStringBody "application/json" """{ "sortBy": "coolness", "take": 10 }"""

withJsonBody : Json.Encode.Value -> RequestBuilder msg -> RequestBuilder msg

Convenience function for adding a JSON body to a request

params = Json.Encode.object
    [ ("sortBy", Json.Encode.string "coolness")
    , ("take", Json.Encode.int 10)
    ]

post "https://example.com/api/items/1"
    |> withJsonBody params

withMultipartStringBody : List ( String, String ) -> RequestBuilder msg -> RequestBuilder msg

Convenience function for adding multipart bodies composed of String, String key-value pairs. Since Http.stringData is currently the only Http.Data creator having this function removes the need to use the Http.Data type in your type signatures.

post "https://example.com/api/items/1"
    |> withMultipartStringBody [ ( "user", JS.encode user ) ]

withUrlEncodedBody : List ( String, String ) -> RequestBuilder msg -> RequestBuilder msg

Convenience function for adding url encoded bodies

post "https://example.com/api/whatever"
    |> withUrlEncodedBody [ ( "user", "Luke" ), ( "pwd", "secret" ) ]

withTimeout : Basics.Float -> RequestBuilder msg -> RequestBuilder msg

Set the timeout setting on the request

get "https://example.com/api/items/1"
    |> withTimeout (10 * Time.second)

withCredentials : RequestBuilder msg -> RequestBuilder msg

Set the withCredentials flag on the request to True. Works via XMLHttpRequest#withCredentials

get "https://example.com/api/items/1"
    |> withCredentials

withExpect : Http.Expect b -> RequestBuilder msg -> RequestBuilder b

Choose an Expect for the request

get "https://example.com/api/items/1"
    |> withExpect (Http.expectJson GotItem itemsDecoder)

withBearerToken : String -> RequestBuilder msg -> RequestBuilder msg

Add a bearer token to a request

get "https://example.com/api/items/1"
    |> withBearerToken "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhIjoiYSJ9.MvhYYpYBuN1rUaV0GGnQGvr889zY0xSc20Lnt8nMTfE"

withTracker : String -> RequestBuilder msg -> RequestBuilder msg

Set the tracker on the request.

get "<https://example.com/api/items/1">
    |> withTracker "tracker"

Make the request

request : RequestBuilder msg -> Platform.Cmd.Cmd msg

Send the request