Peppermint - Easy to use process-less HTTP client build on Mint

Peppermint (Docs)

I build an easy-to-use process-less HTTP client build on Mint. It should cover the basic needs, without needing to deep-dive into Mint itself.

Some examples:

GET

{:ok, %{status: 200, headers: headers, body: body}} =
  Peppermint.get("http://httpbin.org/get?foo=bar")

POST

{:ok, %{status: 200, headers: headers, body: body}} =
  Peppermint.post("http://httpbin.org/post", params: %{foo: "bar"})

POST JSON

{:ok, %{status: 200, headers: headers, body: body}} =
  Peppermint.post("http://httpbin.org/post",
    headers: [{"Content-Type", "application/json"}],
    body: Jason.encode!(%{foo: "bar"})
  )

Check the docs for more info.

I’m open to suggestions and feature requests, although I do try to keep it simple.

Let me know what you think!

8 Likes

Amazing and simple. Thanks for contributing!

Maybe a noob question. But why would I prefer a pool-less library rather than a process based like HTTPoison?

The only one I can think of is for not blocking requests.

Not a noob question at all. I find that I don’t need a pool for most of my use cases. If I do need one, I’d rather handle it myself.

A pool helps when you need to do multiple subsequent requests to the same host. You could spawn a new process for each request, but then you might overload the target with too many connections. A pool will limit the amount of connections to a single host and reuse connections to optimise throughput.

HTTPoison / hackney is actually pretty nice. It will keep a single connection open and re-use it for next requests. I just prefer Mint over hackney because of stability and correct SSL handling.

2 Likes

Just released v0.3.0:

v0.3.0

  • Peppermint.Connection: force HTTP/1 requests to be handled sequentially
  • Improve isolated request error handling for HTTP/2 requests

v0.2.0

  • Added Peppermint.Connection. A GenServer that can handle multiple requests simultaneously.
  • Rewrite to support usage of Peppermint in custom processes.

Awesome library, I find myself making a one off request to an upstream server, most of the http clients maintained a connection pool to the server after the initial request which was unnecessary in this context.
Mint was too low level, I just stumbled across this library.

One reason to prefer a process-less over a process base will be the overhead of copying the response.

Thank you for the great work.

1 Like