async-http icon indicating copy to clipboard operation
async-http copied to clipboard

Kwargs instead of positional args

Open swrobel opened this issue 5 years ago • 3 comments

I'm curious why the decision was made to take positional, rather than keyword args in a modern library like this.

internet.post("https://httpbin.org/anything", body: body)

seems preferable to

internet.post("https://httpbin.org/anything", nil, body)

swrobel avatar Apr 16 '20 18:04 swrobel

Positional args were at the time slightly more efficient and predictable than kwargs, but I'd be open to changing this if you think there is a significant improvement to interface ergonomics.

ioquatix avatar Apr 17 '20 03:04 ioquatix

I've changed Async::HTTP::Client and Async::HTTP::Server to use keyword arguments.

I'm not sure we can easily change these methods without breaking a ton of stuff.

ioquatix avatar Dec 26 '20 05:12 ioquatix

If we think the ergonimics outweighs the overhead, something like this can work:

def get(_headers = nil, _body = nil, headers: _headers, body: _body)
  # ...
end

and be backwards compatible. As long as the performance cost is insignificant, I'd be willing to accept this for the def get / post / patch convenience methods for Async::HTTP::Internet (but probably not call).

ioquatix avatar Aug 13 '22 05:08 ioquatix