One long, intimate month with the Facebook API
anilchawla.org
anilchawla.org
The API had the exact same problems then... unanswered questions, confusing documentation, complex code examples. Something that seemed so simple--post a link to someone's wall, with their permission--turned into a multi-day codefest. But I finally got it working!
Until one day a few months later, when the API changed without warning. And that's what I think the biggest problem with the FB API is... they (at least back in the day) change it constantly, without much warning, and don't update documentation in a sane way. It's impossible to build once and forget.
I finally got a complaint from a user one day that the FB integration wasn't working. When I went in to check the code, I found that FB had almost completely changed their JS libraries and made significant API changes. Instead of going through that hell again, I just removed the feature.
When it comes back online, I mark it as not stale, and if it differs from the previous (non-stale) version, I send out an email.
I loved the article, but I'm a bit surprised that you're surprised. What else would you expect from a massive NoSQL installation? It seems to me a given that they are going to trade some data integrity (in the form of missing attributes) for speed of access. I'd assume that was a fundamental design goal of the architecture.
I'm barely starting the Facebook API but the solution I'll use is to put the code for interpretating a given query into a series of configuration files using a DSL to interpret the Json. It's mostly a series of entries like:
foo = [bar or baz or "default"]
This way any change in graph structure can be dealt with quickly (this would be a problem for XML/XSLT except they are too slow AND they don't do incremental interpretation).http://datingdissection.com/2011/02/21/breakup-notifier-make...
- you can't like pictures or even see likes for pictures
- you can't post on your wall if the attached image is located in your fcebook album: so if you want to post an image you have to upload it somewhere else.
- you can't rename friend lists
- lots of things are inaccessible if your friends have strict security settings (like their birthday, or their name)
- as outlined in the article: the notification data structure is a train wreck
- you can't approve friend requests
- some parts of the API are not documented at all, like the 'attachment' field on the posts table: it contains a dictionary, but in order to understand the keys and values you have to read the raw data from lots of posts, and even then you never know if one future entry breaks your app.
- and much more
One problem I had was that users expected much of this to work because it works on the Facebook iPhone app too. But that one is official and does not need to use the limited app API.
The documentation is sort of there, sometimes contradictory, and I always have to resort to reading their code examples in PHP to really figure out what data is expected, how to format it, and what I get back. None of their APIs are really well thought-out, they're all slapped together to sort of have all the relevant data. I understand that it's better to ship than not, but a little thought. Please?
The greatest irony though is that if you want to make a post asking for help in the official developer forum, you're met by this page:
http://forum.developers.facebook.net/register.php?agree=Agre...
There's a lesson here in marketing: can you predict which name will get more buzz, 'Breakup Notifier' or 'Friend Mail'?
There's another lesson in marketing - you sell the sizzle, not the steak, but if the steak is awful you won't sell very many for very long regardless of how sizz-tastic your marketing is.
I can't compare both these products - and I hope they're both solid.
And that the amount of support and 'release cycles' (frequency of updates and fixes) is something that you should always consider when integrating another piece of software into your own system.
I am just wall posting and uploading photos though, and not doing any real data retrieval. Maybe facebook is more focussed on API's that put stuff in instead of taking things out? ;)
Remember ChromeSpeed? Fancy seeing you here!