[development] Freezing the Drupal API

Adrian Rossouw adrian at bryght.com
Tue May 16 08:16:20 UTC 2006


On 16 May 2006, at 3:24 AM, Richard Archer wrote:
> I would also argue that the lack of a robust API has a detrimental
> effect on the quality of the code in Drupal. For a simple example,
> trace through the code that displays a menu item and see how much
> code is executed to perform this task! I think this is a good
> example of where "code is gold" and not having a well-defined
> API to work within has led code which is complex, convoluted and
> inefficient.

I'm going to step in here and post what I hope to be possible with  
FAPI 2.0
Fapi is still remarkably badly named, because it's not really what  
it's about.

In FAPI 2.0, you define the form fields, separately from the form  
elements (ie: widgets).
You can have multiple forms, or output view, based on the same set of  
fields (ie: different views
of the same model).

Additionally, you get multiple actions that can be executed on that  
same model (ie: the controller,
or the _submit functionality).

Due to the separation of the forms / actions from the page model, we  
will no longer have to generate the
entire page, and then do the form_builder process to extract the  
field definitions. All models, views
and controllers will have be accessible through a path (ie: the user  
login form can be retrieved by
doing drupal_get_form('user/login'); , without having to create an  
array and push it through the entire
process. It will just pull what it needs, when it needs it.

It's also an implmentation of the Command Pattern (http:// 
en.wikipedia.org/wiki/Command_pattern),
but where it gets really interesting is the following.

Every thing that drupal can do via a form, drupal can do through a  
standard programmable interface.
Take the following for example :

$request = drupal_get_request('node/add/event');
$request['title'] => 'something';
$request['body'] => 'something';
$result = drupal_send_request('node/add/event', $request);

What this does, is it gets the correct model(s) for that specific  
action, then it allows you to populate
the variables, however you want. And then when you send the request,  
it goes back through
the original form _validate, and finally hits the original _submit.

This can be done for any form, that you have sufficient access to,  
and each of these actions
can then be publicly exported via ReST, xmlrpc, soap, you name it.

What it essentially does is create a standard API for everything to  
use, and for that reason
I've been joking with calling it the API API or API ^ 2.0




--
Adrian Rossouw
Drupal developer and Bryght Guy
http://drupal.org | http://bryght.com




More information about the development mailing list