Your argument is exactly why I don't use Google AppEngine. I know there are open-source stacks now that you can use if you want to take your AppEngine code in-house, but trying to build up an AppEngine infrastructure at probably the worst possible time ("we're getting billed @ $10k/month, but only making $8k! getting more popular will cause us to lose more money! quick, switch to custom servers!") when you can build up a solid infrastructure using technology that you can replicate on any VPS or managed box or colocated hardware that you buy seems the easiest way to scale.
So what's your solution? Write everything in assembly and run it on your own servers?
I think the way to proceed is to look at the stability of the API and the historical level of backwards compatibility that the API creator has provided and explicitly take that into account when you're developing an application. This is one of the things that Microsoft does very well, better than Linux (where GUI APIs, especially, seem to mutate every few years) and OSX. In general, though, any desktop API is much better, in terms of maintaining backwards compatibility and announcing breaking changes, than any mobile (iOS, Android, etc.) API, and mobile APIs, in turn, are better than web APIs. This isn't a case for never using mobile or web APIs, but it is a case for ensuring that you have enough resources (or a loose enough timeline) to deal with API churn as well as developing new features.
The only way to get away from APIs entirely is to write your own code, run it on your own OS, using custom hardware that you've designed yourself. That way lies madness, or, equivalently, game console programming ;)
Is the criticism due to the annual version update? Or is it because there are API changes every new version? If it's the latter, wouldn't updates be expected, and in fact desired? It may just be me, but I've had good experiences when it comes to API stability with iOS. I've been unable to keep up with the newer features (I'm indie and only work on apps jn my spare time) but the new features rarely get in the way of my app being able to run with the calls they are already making.
I'm aware of the UDID deprecation from before, but devs were given plenty of time to transition from it. Actually, I was surprised how much time they gave.
Persona is perfect for blogs, but using it for a service people may be paying for, or handles any private user information (postal address, private messages or posts on a forum etc) is a bad idea.
I feel you should mention whether or no you pay for the API and have a legitimate contract enforceable with law.
This is one reason why I don't use google APIs; I can't pay for them with any sort of reasonable SLA.
For authentication I'd argue in some ways it's better to provide the option of third-party. This means users don't have to submit credentials to you. Given most people (against advice to the contrary) use the same username and password for most sites signing up to an unknown company's service feels riskier as they're then giving that company their credentials, which someone may then try on other sites - having a token which allows them to sign in with their Google/FB/Twitter/etc account saves this worry / only requires the user to hit an "authorise" button.
- Be careful with companies that don't sell the API or SDK as a product (Twitter, Google, Faceboook, etc.)
- Watch out for companies that don't like to publish roadmaps and makes APIs and SDKs deprecated or obsolete with little warning (Apple, and more recently Microsoft)
Because you pay for S3, AMZN has many incentives to make it reliable and keep it going.
A free API might look like a giveaway, but it is ALWAYS a chance to take.
Can you give an example of that?
I believe at some point iBooks could go to a darker brightness setting than other apps were allowed to.
Those are the two that jump to my mind.
So before building something that relies on things entirely outside of your control, consider a few things and the effort it would take for each:
- Can you run it on something else (S3 is a good example - there are several API-compatible competitors) - Can you replace the service you're relying on with one of your own (e.g. building your own Google Reader sync API)
Then decide if it isn't worth building the whole thing yourself. Heck, you might even want to put an API on it yourself. Feel the power? :)
Oh, and never, ever rely on someone else doing authentication for you. It's just too easy to get your entire userbase taken away from you.