Dare Obasanjo aka Carnage4Life
You can buy cars but you can't buy respect in the 'hood - Curtis Jackson
Navigation for Dare Obasanjo aka Carnage4Life - BlogThis: How Not To Design An Extensible API
Content
Sidebar
Footer
April 13, 2003
@ 04:58 PM
Comments [0]
BlogThis: How Not To Design An Extensible API
The reason I didn't like the
original proposed interface
was that it limited the scope of plugins. It basically said a plugin can do is react to an RSS item it has been passed. In RSS Bandit terms this means that the only place a plugin makes sense is when you right-click on an RSS item in the listview (
screenshot
). Granted there are a lot of cool plugins you could write with this such one that enabled printing of RSS items, one that opened the enabled you to forward the item as an email or one that enabled you to post a reply to the item to your blog. However none of these involve integration with the aggregator the plugin is interacting with. This is analogous to an Internet Explorer plugin only having access to the current HTML the web browser was displaying and not the browser's object model. The API is useful, limited but useful.
The second API is just a disaster waiting to happen. I've posted prior thoughts on the lessons we've learned on my team and across the CLR/BCL on the
fragility of interfaces when it comes to versioning
. Sam Ruby also points out to the
proliferation of "2" and "Ex" suffixes in COM definitions that have been around a while
. Specific to the API, here are my issues with
Don's version
which is SImon's version plus implementing IXPathNavigable as well in the RSS item.
The most interesting parts of an RSS feed are not exposed by the interface. There is no way to tell the author of the post, the category the post is in or where to find the comments in response to the post. These are just a few of items from
items from the RSS 2.0 namespace
that are not supported. This interface also doesn't allow for supporting elements in the item from other namespaces which precludes things like supporting the
CommentAPI
or a number of the
Dublin Core elements
.
Implementing IXPathNavigable on this interface seems to be pushing complexity on implementers with dubious benefits. It's unlikely that anyone will want to perform XPath queries or run XSLT transforms on an implementer of the IWeblogItem given that they can easily interact with the 5 properties in the object much quicker (both code and performance wise) than they can perform queries or stylesheet transformations. One suggestion for the justification of implementing IXPathNavigable may be that it allows the implementer to expose more info about the RSS item than those exposed by the properties of the interface. For example, this would mean that using an XPathNavigator over the IWeblogItem gives access to the dublin core elements and ither namespaced elements in the RSS item even though only five of these elements were directly accessible as properties via the interface. This is confusing in its duality but at least lends itself to extensibility. However, at this point one wonders why not just provide an XPathNavigator as the RSS item and not the paltry IWeblogItem interface.
The interface does not expose enough information about the RSS item, goto (1) for more discussion about this.
Tweet
Categories:
« RSS Bandit v1.1 beta, Ladder Theory of R...
|
Home
|
Tight Coupling vs. Loose Coupling »
Comments are closed.
RSS/Subscribe
Archives
All dates
All Posts
Search
Latest Posts
Girls Around Me app FREAK OUT is really a FourSquare freak out in Disguise
Some Thoughts on Address Book Privacy and Hashing as an Alternative to Gathering Raw Email Addresses
What I Learned After 3 Weeks of Writing Mobile Apps
The Social Graph: An Imperfect Abstraction or an Evolutionary Dead End?
The Real Problem with Facebook
Categories
Cloud Computing (3)
Comics (1)
Competitors/Web Companies (157)
Current Affairs (31)
Das Blog (3)
Life in the B0rg Cube (194)
Mindless Link Propagation (185)
Movie Review (13)
MSN (127)
Music (20)
Office Live (8)
Personal (53)
Platforms (57)
Programming (56)
Ramblings (144)
Rants (7)
RSS Bandit (215)
Seattle Startup Shoutout (4)
Social Software (182)
Startup Shoutout (4)
Syndication Technology (107)
Technology (162)
Trip Report (64)
Video Games (6)
Web Development (196)
Windows Live (228)
XML (203)
XML Web Services (114)
Archives
April, 2012 (1)
February, 2012 (1)
January, 2012 (1)
November, 2011 (1)
September, 2011 (3)
July, 2011 (2)
June, 2011 (1)
April, 2011 (1)
March, 2011 (1)
January, 2011 (2)
November, 2010 (2)
October, 2010 (2)
August, 2010 (3)
July, 2010 (3)
June, 2010 (3)
April, 2010 (6)
March, 2010 (3)
February, 2010 (5)
January, 2010 (4)
December, 2009 (2)
November, 2009 (8)
October, 2009 (2)
September, 2009 (3)
August, 2009 (4)
June, 2009 (1)
May, 2009 (12)
April, 2009 (5)
March, 2009 (16)
February, 2009 (11)
January, 2009 (20)
December, 2008 (12)
November, 2008 (12)
October, 2008 (22)
September, 2008 (12)
August, 2008 (15)
July, 2008 (18)
June, 2008 (19)
May, 2008 (12)
March, 2008 (2)
February, 2008 (27)
January, 2008 (20)
December, 2007 (26)
November, 2007 (25)
October, 2007 (30)
September, 2007 (16)
August, 2007 (34)
July, 2007 (26)
June, 2007 (32)
May, 2007 (38)
April, 2007 (15)
March, 2007 (32)
February, 2007 (33)
January, 2007 (31)
December, 2006 (29)
November, 2006 (47)
October, 2006 (26)
September, 2006 (45)
August, 2006 (41)
July, 2006 (38)
June, 2006 (47)
May, 2006 (34)
April, 2006 (39)
March, 2006 (35)
February, 2006 (45)
January, 2006 (42)
December, 2005 (43)
November, 2005 (40)
October, 2005 (48)
September, 2005 (45)
August, 2005 (40)
July, 2005 (31)
June, 2005 (35)
May, 2005 (39)
April, 2005 (31)
March, 2005 (39)
February, 2005 (22)
January, 2005 (25)
December, 2004 (32)
November, 2004 (27)
October, 2004 (24)
September, 2004 (26)
August, 2004 (21)
July, 2004 (27)
June, 2004 (28)
May, 2004 (40)
April, 2004 (37)
March, 2004 (41)
February, 2004 (51)
January, 2004 (54)
December, 2003 (42)
November, 2003 (40)
October, 2003 (41)
September, 2003 (9)
August, 2003 (11)
July, 2003 (10)
June, 2003 (15)
May, 2003 (12)
April, 2003 (13)
March, 2003 (13)
February, 2003 (13)
January, 2003 (13)
December, 2002 (12)
November, 2002 (8)
October, 2002 (6)
September, 2002 (5)
August, 2002 (6)
July, 2002 (7)
June, 2002 (4)
May, 2002 (8)
April, 2002 (3)
March, 2002 (1)
February, 2002 (1)
January, 2002 (4)
November, 2001 (4)
October, 2001 (3)
September, 2001 (3)
August, 2001 (1)
July, 2001 (1)
April, 2001 (3)
March, 2001 (2)
Admin
Sign In