The program as data

Augmenting the evolving API

Posted in ActionScript, API, flex by seanp33 on December 3, 2010

Recently I’ve been confronted with some collective distaste of my in-house framework’s api. It’s been enlightening learning how my original design is failing to meet the needs of the small (but growing) developer community.  Like any API, mine prescribes a set of types which are, via the associated framework, injected into developer-provided “components” at run-time. Behind these types are of course, concrete implementations, and in one particular case, instances of MDIWindow of the popular Flexlib library. So the specific problem that folks are running into is that these APIs are a tad too generic. As a project owner, I have to provide regular release cycles, and as a result, changes/enhancements to the api need to applied  to scheduled releases. That is to say, if 90% of the developer community is screaming for a “public woobie():void” on the API, it can’t just be slapped on, it has to be implemented during the course of our normal sprint cycle. And after reading the landmark work of 37 signals, Getting Real, I tend to look at adding functionality like adopting children.

But it’s all good. ActionScript (like its cousin JavaScript) allows for the “targeting” of fields.

Consider the following..

public class ThirdPartyThing{
  public function woobie():void{...}
}

public interface IMyApiThing{
  function someApiMethod():void;
}

public class MyThing extends ThirdPartyThing implements IMyApiThing{
  public function someApiMethod():void{...}

}

And then, any client of IMyApiThing can access the “formal” API via instanceOfIMyApiThing.someApiMethod();

or the informal API via instanceOfIMyApiThing["woobie"]();

I understand how that actually kinda sucks. Ideally, an API exposes the correct interface. But in reality, living things evolve. The API of a thing is collectively designed  by the community that uses (and curses) it.  This post is mostly about the relevance of “targeting” as a mechanism to derive and evolve an API. My view is that every time a user targets a field not exposed by the API, it’s a cue to consider adopting that targeted field as a 1st class citizen. And for that reason, I’ve been encouraging people to target-away – but just let me know about it so that the gorilla tactics of targeting can inform the design of a relevant API.

Advertisement

2 Responses

Subscribe to comments with RSS.

  1. craig said, on December 9, 2010 at 2:28 am

    Yea I agree b/c of the language/environment you’re working with. As you demonstrated, it’s easy to get around the API if you want to…but if people are doing that it would be nice to know so the API can evolve as necessary (or desired).

    Some good API discussion on the recent Java Posse: http://www.javaposse.com/java-posse-331-roundup-10-modules

  2. Alberto Flores said, on March 29, 2011 at 11:50 am

    When can I get some access to this code you’re talking about? I would love to contribute.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.