I really like the work you've put in and I'm sorry I'm late replying here.
As you may or may not know, I'm maintaining Buzz, HTTPlug (and sometimes Guzzle). I've also written a PSR7 implementation with factories from HTTPlug and php-interop. (
https://github.com/nyholm/psr7)
I've just read and tested(!!) the specification we are voting on. I'm not sure it works to be honest. Here are a few things I found:
Namespace (minor): Should we really share the namespace with PSR7? Just use 'Psr\Http\MessageFactory'
Interfaces extending (critical): I've read the arguments on the meta document. The four bullets (
https://github.com/php-fig/fig-standards/blob/master/proposed/http-factory/http-factory-meta.md#53-why-do-some-interfaces-extend-others) are all very true but none is an argument for the interface to extend each other.
The first bullet about this in the meta document says:
> The
RequestFactoryInterface
and
ServerRequestFactoryInterface
may each
need to build a
UriInterface
from a string URI.
Inheritance is not the answer here. Please use a constructor to inject the dependencies (or if you are lazy, do like me
https://github.com/Nyholm/psr7/blob/0.3.0/src/Request.php#L58).
Consider a MailFactoryInterface. The mail factory implementation may need an EmailValidator. Should the MailFactoryInterface really extend EmailValidatorInterface?...
I found it very hard to write factory implementation with these interfaces. Most of
my classes have to extend each other and I have to put the stream
factory implementation in a Trait.
Existing libraries (major): HTTPlug has been an "de-facto" standard for almost 3 years now. The php-http/message-factory has been downloaded over 4M times. We (HTTPlug) like PSR-17 and we think it is about time PHP-Fig delivers a "real" standard for this. However, the current state of PSR-17 will not allow HTTPlug to extend PSR-17. It will also not allow implementing libraries (like guzzle/psr7 and nyholm/psr7) to have one RequestFactory for both PSR-17 and HTTPlug.
There is no mentioning about HTTPlug in the meta docs so I'm not sure it has been discussed. This is important for the adoption of the PSR-17.
-----------------
These are 3 of my concerns. I really hope that everybody in the working group have considered these 3 things before you voted. Or else there I believe there is a change to change your vote until the voting period is over or until everybody has voted.
I will give my vote on the 29th of May.