Personally I tend to use HTTPlug rather than Guzzle, because that way I can avoid binding to a specific implementation. In practice I tend to use the Guzzle driver for it most often, but if I’m building an API client that’s potentially going to be reused, I don’t know what will make sense as the driver in that context, so it’s safer to use HTTPlug and just specify that it must have a suitable driver, so whoever uses it can make their own choice about HTTP clients. That said, I’m not sure it would be worth choosing HTTPlug over Guzzle for something other than a reusable library.