Yeah, I'm going to disagree a bit with the original post in this thread, and with Richard's contribution too. Or at least qualify it.

My experience is that folks trying to be pure and avoid an API do _not_ make it easier for me to consume as a developer writing clients. It's just not true that one always leads to the other.

The easiest API's I have to deal with are those where the developers really understand the use cases clients are likely to have, and really make API's that conveniently serve those use cases.

The most difficult API's I have to deal with are those where the developers spent a lot of time thinking about very abstract and theoretical concerns of architectural purity, whether in terms of REST, linked data, HATEOS, or, god forbid, all of those and more at once (and then realizing that sometimes they seem to conflict) -- and neglected to think about actual use cases and making them smooth.

Seriously, think about the most pleasant, efficient, and powerful API's you have used. (github's? Something else?). How many of them are 'pure' non-API API's, how many of them are actually API's?

I'm going to call it an "API" even if it does what the original post says, I'm going to say "API" in the sense of "how software is meant to deal with this" -- in the base case, the so-called "API" can be "screen scrape HTML", okay.

I am going to agree that aligning the API with the user-visible web app as much as possible -- what the original post is saying you should always and only do -- does make sense. But slavish devotion to avoiding any API as distinct from the human web UI at all leads to theoretically pure but difficult to use API's.

Sometimes the 'information architecture' that makes sense for humans differs from what makes sense for machine access. Sometimes the human UI needs lots of JS which complicates things. Even without this, an API which lets me choose representations based on different URI's instead of _only_ conneg (say, "/widget/18.json" instead of only "/widget/18" with conneg) ends up being significantly easier to develop against and debug.

Spend a bit of time understanding what people consider theoretically pure, sure, because it can give you more tools in your toolbox. But simply slavishly sticking to it does not, in my experience, result in a good 'developer experience' for your developer clients. And when you start realizing that different people from different schools have different ideas of what 'theoretically pure' looks like, when you start spending many hours going over "HTTP RANGE 14" and just getting more confused -- realize that what matters in the end is being easy to use for your developers use cases, and just do it.

Personally, I'd spend more time making sure i understand my developers
use cases and getting feedback from developers, and less time on architecting castles in the sky that are theoretically pure.

On 12/2/13 9:56 AM, Bill Dueber wrote:
On Sun, Dec 1, 2013 at 7:57 PM, Barnes, Hugh <hugh.bar...@lincoln.ac.nz>wrote:

+1 to all of Richard's points here. Making something easier for you to
develop is no justification for making it harder to consume or deviating
from well supported standards.



​I just want to point out that as much as we all really, *really* want
"easy to consume" and "following the standards" to be the same
thing....they're not. Correct content negotiation is one of those things
that often follows the phrase "all they have to do...", which is always a
red flag, as in  "Why give the user  different URLs ​when *all they have to
do is*...". Caching, json vs javascript vs jsonp, etc. all make this
harder. If *all * *I have to do* is know that all the consumers of my data
are going to do content negotiation right, and then I need to get deep into
the guts of my caching mechanism, then set up an environment where it's all
easy to test...well, it's harder.

And don't tell me how lazy I am until you invent a day with a lot more
hours. I'm sick of people telling me I'm lazy because I'm not pure. I
expose APIs (which have their own share of problems, of course) because I
want them to be *useful* and *used. *

   -Bill, apparently feeling a little bitter this morning -




Reply via email to