Hi Maté,

I finally got the time to review the proposed API and I did some experiments 
using a PHP userland polyfill for RFC3986Uri to test the water and to see if I 
did understood everything.

First thing first, the API is really well thought and at least for me and my 
League/Uri package it is really easy to
go around and use it if needed. Having said that I had some questions during 
implementation.

Specifically for RFC3986Uri I see that the only difference between the `parse` 
named constructor and the constructor is that the former will return `null` 
instead of throwing an exception. But it is not clear if both methods can work 
with partial URI. What is the expected result of

new Rfc3986Uri('?query#fragment');

will the class throw an exception because the missing base URI or will the 
parsing still occur and return a new instance of the URI ? Whatever the answer 
I think it should be clearly stated in the RFC. Because from the look of it
One may think that partial parsing which is use a lot is not longer supported 
and possible and that the URI should always be absolute. If partial parsing is 
in fact no longer supported maybe a distinct method should be added to support 
for that scenario. AFAIK, the WHATWGUri does not support partial URI and always 
required an absolute URI. So maybe adding a distinct named constructor 
specifically for the RFC3986 would make understanding the code easier and 
reduce suprises on usage ?

I also think that the RFC should emphasized that the RFC3986 URI is only 
**parsing** the URI and not validating the URI like the WHATWGUri counterpart. 
the following URI will pass without issue

new Rfc3986('https:example.com');

this is a valid RFC3986 URI but it is clearly not a valid http URL.

Reply via email to