PSR-18 is the HTTP client interface libraries should require

An SDK that requires a concrete HTTP client propagates that choice to every consumer, and two SDKs requiring different majors of the same client cannot be installed together.

public function __construct(
    ClientInterface $http,           // PSR-18
    RequestFactoryInterface $requests, // PSR-17
    StreamFactoryInterface $streams
) {}

// three interfaces rather than one, because PSR-7 messages are
// immutable and something has to construct them.

The three-interface constructor is the awkward part and it is why adoption took so long — PSR-7 has no way to create a request, so a client that only depends on PSR-18 cannot make one. php-http/discovery exists to paper over that and is itself a dependency. For an application none of this matters; for a package it is the difference between being installable alongside anything and being a resolution problem.