[whatwg] [URL] DOM API Feedback

Adam Barth w3c at adambarth.com
Wed Nov 14 11:12:50 PST 2012


On Wed, Nov 14, 2012 at 10:54 AM, Anne van Kesteren <annevk at annevk.nl> wrote:
> On Thu, Nov 8, 2012 at 5:58 PM, Adam Barth <w3c at adambarth.com> wrote:
>> On Thu, Nov 8, 2012 at 6:22 AM, Alex Russell <slightlyoff at google.com> wrote:
>>>    - "username" and "password" properties are missing
>>>    - There aren't any provided comparison functions. I.e., there's no way
>>>    to tell if two URL objects reference the same absolute URL, if
>>>    one references a path in the same domain, etc.
>>
>> The notion of "the same absolute URL" is a bit slippery.  It depends
>> on how well you understand various URL components (e.g., octal
>> encodings of IP addesss).  We could define something, of course, but
>> we'd just need to do so carefully.
>
> Yeah, it would be useful to have some use cases and examples here to
> work from. E.g. I suspect we may want to have a method at some point
> that considers these equal:
>
> http://x/?test&test2
> http://x/?test2&test
>
> even though they would always be considered strictly distinct
> currently (and some servers reportedly rely on this distinction).
>
>
>> Yes, the http://url.spec.whatwg.org/#urlquery interface lets you get
>> at parsed URL parameters.  I don't think there's currently a way to
>> turn them into form data objects, but that would make sense.
>>
>> We might also want to add a bulk setter that takes a Dictionary.
>
> Concrete suggestions for URLQuery are very much welcome. For behavior too.
>
> get()/getAll() are clear.
>
> set() not so much:
>   "?x&y&x=5&y"
>   set("x","1")
>
> what happens? Or with set("x", [1,2])? And set("x", [1,2,3]? Idea:
>
>   "?x=1&y&y"
>   "?x=1&y&x=2&y"
>   "?x=1&y&x=2&y&x3"
>
> So set() replaces values in order, removes parameters for which no
> values are set, and adds parameters if there are no existing
> parameters.
>
> I think that calls for add() as well, which simply appends a
> parameter, irrespective of what is there now.

Having multiple parameters with the same name seems like a bit of an
edge case to me.  I wonder if we can get a better API by treating it
as an edge case?  Here's a proposal:

add("foo", "bar") <--- Appends a parameter foo=bar to the existing
query string (even if there's already a parameter foo earlier.)
set({
  "foo": "bar",
  "qux": "baz"
}) <--- Blows away the existing query string and replaces it with
"foo=bar&qux=baz".

In this approach, set() doesn't support having multiple parameters
with the same name.  If you need that, you need to use add().

Adam


> Allowing new FormData(URLQuery) makes sense to me.
>
>
>> That's covered in step 1 of
>> <http://url.spec.whatwg.org/#constructors>.  If there's no explicit
>> base, the URL is resolved relative to about:blank.  To me, that seems
>> better that implicitly using the document's base URL.  You can always
>> supply the document's base URL from document.baseURI if you want.
>
> Yeah, that was my thinking too.
>
>
> --
> http://annevankesteren.nl/



More information about the whatwg mailing list