Re: Fetch API

On Tue, Jun 3, 2014 at 9:38 AM, Jake Archibald <jaffathecake@gmail.com> wrote:
> On 3 June 2014 16:50, Anne van Kesteren <annevk@annevk.nl> wrote:
>>
>> On Sun, Jun 1, 2014 at 8:06 AM, Domenic Denicola
>> <domenic@domenicdenicola.com> wrote:
>>
>> > - I like HeaderMap a lot, but for construction purposes, I wonder if a
>> > shorthand for the usual case could be provided. E.g. it would be nice to be
>> > able to do
>> >
>> > fetch("http://example.com", {
>> >   headers: {
>> >     "X-Foo": "Bar"
>> >   }
>> > });
>> >
>> > instead of, assuming a constructor is added,
>> >
>> > fetch("http://example.com", {
>> >   headers: new HeaderMap([
>> >     ["X-Foo", "Bar"]
>> >   ])
>> > });
>>
>> Yeah, it's not clear to me what is best here. An object whose keys are
>> ByteString and values are either ByteString or a sequence of
>> ByteString? I agree that we want this.
>
> I vote ByteString: ByteString. If you want something more complicated,
> provide a HeaderMap or mutate after construction.

One thing we should keep in mind is if we actually need to support
100% of all the crazyness that servers do. And especially if we need
to support it in a particularly convenient way.

Something like

headers: {
  "X-Foo": "Bar"
}

Does actually have a defined order between the name-value pairs, even
though it's not terribly explicit. And we could even support

headers: {
  "X-Foo": ["Bar", "Bar2"]
}

For supporting sending multiple "X-Foo" headers.

This wouldn't support interleaving headers such that we send two
"X-Foo" headers with a "X-Bar" header in between, but are there
actually use cases for that?

I feel fairly sure that simply doing:

headers: {
  "X-Foo": ["Bar", "Bar2"]
}

Will cover well over 99% of everything that people need to do. And
hopefully the remaining part of a percent could update their servers
to actually support HTTP semantics properly.

/ Jonas

Received on Tuesday, 3 June 2014 19:01:14 UTC