I'm not going to defend API keys, but not all APIs are open or free. You
need to have *some* way to track usage.
There may be alternative ways to implement that, but you can't just hand
wave away the rather large use case for API keys.
-Ross.
On Mon, Dec 2, 2013 at 12:15 PM, Kevin Ford <[log in to unmask]> wrote:
> Though I have some quibbles with Seth's post, I think it's worth drawing
> attention to his repeatedly calling out API keys as a very significant
> barrier to use, or at least entry. Most of the posts here have given
> little attention to the issue API keys present. I can say that I have
> quite often looked elsewhere or simply stopped pursuing my idea the moment
> I discovered an API key was mandatory.
>
> As for the presumed difficulty with implementing content negotiation (and,
> especially, caching on top), it seems that if you can implement an entire
> system to manage assignment of and access by API key, then I do not
> understand how content negotiation and caching are significantly "harder to
> implement."
>
> In any event, APIs and content negotiation are not mutually exclusive. One
> should be able to use the HTTP URI to access multiple representations of
> the resource without recourse to a custom API.
>
> Yours,
> Kevin
>
>
>
>
>
> On 11/29/2013 02:44 PM, Robert Sanderson wrote:
>
>> (posted in the comments on the blog and reposted here for further
>> discussion, if interest)
>>
>>
>> While I couldn't agree more with the post's starting point -- URIs
>> identify
>> (concepts) and use HTTP as your API -- I couldn't disagree more with the
>> "use content negotiation" conclusion.
>>
>> I'm with Dan Cohen in his comment regarding using different URIs for
>> different representations for several reasons below.
>>
>> It's harder to implement Content Negotiation than your own API, because
>> you
>> get to define your own API whereas you have to follow someone else's rules
>> when you implement conneg. You can't get your own API wrong. I agree
>> with
>> Ruben that HTTP is better than rolling your own proprietary API, we
>> disagree that conneg is the correct solution. The choice is between
>> conneg
>> or regular HTTP, not conneg or a proprietary API.
>>
>> Secondly, you need to look at the HTTP headers and parse quite a complex
>> structure to determine what is being requested. You can't just put a file
>> in the file system, unlike with separate URIs for distinct representations
>> where it just works, instead you need server side processing. This also
>> makes it much harder to cache the responses, as the cache needs to
>> determine whether or not the representation has changed -- the cache also
>> needs to parse the headers rather than just comparing URI and content.
>> For
>> large scale systems like DPLA and Europeana, caching is essential for
>> quality of service.
>>
>> How do you find our which formats are supported by conneg? By reading the
>> documentation. Which could just say "add .json on the end". The Vary
>> header
>> tells you that negotiation in the format dimension is possible, just not
>> what to do to actually get anything back. There isn't a way to find this
>> out from HTTP automatically,so now you need to read both the site's docs
>> AND the HTTP docs. APIs can, on the other hand, do this. Consider
>> OAI-PMH's ListMetadataFormats and SRU's Explain response.
>>
>> Instead you can have a separate URI for each representation and link them
>> with Link headers, or just a simple rule like add '.json' on the end. No
>> need for complicated content negotiation at all. Link headers can be
>> added
>> with a simple apache configuration rule, and as they're static are easy to
>> cache. So the server side is easy, and the client side is trivial.
>> Compared to being difficult at both ends with content negotiation.
>>
>> It can be useful to make statements about the different representations,
>> and especially if you need to annotate the structure or content. Or share
>> it -- you can't email someone a link that includes the right Accept
>> headers
>> to send -- as in the post, you need to send them a command line like curl
>> with -H.
>>
>> An experiment for fans of content negotiation: Have both .json and 302
>> style conneg from your original URI to that .json file. Advertise both.
>> See
>> how many people do the conneg. If it's non-zero, I'll be extremely
>> surprised.
>>
>> And a challenge: Even with libraries there's still complexity to figuring
>> out how and what to serve. Find me sites that correctly implement * based
>> fallbacks. Or even process q values. I'll bet I can find 10 that do
>> content
>> negotiation wrong, for every 1 that does it correctly. I'll start:
>> dx.doi.org touts its content negotiation for metadata, yet doesn't
>> implement q values or *s. You have to go to the documentation to figure
>> out
>> what Accept headers it will do string equality tests against.
>>
>> Rob
>>
>>
>>
>> On Fri, Nov 29, 2013 at 6:24 AM, Seth van Hooland <[log in to unmask]>
>> wrote:
>>
>>>
>>> Dear all,
>>>
>>> I guess some of you will be interested in the blogpost of my colleague
>>>
>> and co-author Ruben regarding the misunderstandings on the use and abuse
>> of
>> APIs in a digital libraries context, including a description of both good
>> and bad practices from Europeana, DPLA and the Cooper Hewitt museum:
>>
>>>
>>> http://ruben.verborgh.org/blog/2013/11/29/the-lie-of-the-api/
>>>
>>> Kind regards,
>>>
>>> Seth van Hooland
>>> Président du Master en Sciences et Technologies de l'Information et de la
>>>
>> Communication (MaSTIC)
>>
>>> Université Libre de Bruxelles
>>> Av. F.D. Roosevelt, 50 CP 123 | 1050 Bruxelles
>>> http://homepages.ulb.ac.be/~svhoolan/
>>> http://twitter.com/#!/sethvanhooland
>>> http://mastic.ulb.ac.be
>>> 0032 2 650 4765
>>> Office: DC11.102
>>>
>>
|