It supports both HTTP/1.1 and HTTP/2, with synchronous and asynchronous execution modes.
The main features yet to be implemented are:
multipart requests
custom middleware
web socket client
I have tried to make the documentation quite comprehensive, and the API should be mostly stable leading up to 1.0.0. I am still pondering over things like how much input validation/exception handling to do to hide the java internals and would appreciate any thoughts in this area.
A lot of credit goes to other libraries in this area such as clj-http and aleph, from which much of the implementation was sourced.
I can understand an HTTP server being (or not being) Ring-compliant. Not sure how that applies to a client – which is for making HTTP calls, not for responding to them.
Yes, Aleph is a drop-in replacement for a Ring server. http-kit’s server code is also (almost) a drop-in replacement for a Ring server.
Not sure how clj-http can be a drop-in replacement for a Ring server…?
But ya, I goofed though. Totally thought this was a server, even though I even wrote client on my previous post, and really I was thinking clj-http wrapped the Apache server
Now that my brain caught up with it being a client, it looks very nice!
hato accepts a superset of the ring request options and returns a superset of the ring response attributes.
That said, typically a user would interact via higher level options (e.g a single url instead of protocol/hostname/port/path/query-string), and the default middleware stack will coerce those options into a ring request before turning it into a Java HttpRequest.
In terms of drop-in replacement, hato, like the aleph client, aims to be very similar to clj-http, and so most request options will just work. The client options are slightly different due to the different underlying implementation but for the most part should be a trivial change.