I seem to have some trouble understanding the way DirectStore.Api.save maps its request data. Looking at firefox when some record in the store gets saved the request takes on the following format (json):

Is the data property intentionally an array with both scalars ánd objects? Why does it put the ID separate from the rest of the data (even with API methods that have a len of 1) - in other words, why supply two sets of parameters to the server when there's only one parameter that is expected by the server?

Then if this is intentionally then how to expect the router (and/or the client) to know to go to the second set of data to get all of the neccesary parameters

and this was while using ext-all.js.
i did some changes to Ext.data.DirectProxy.doRequest(), so i can really use all api options and even better, have a single directFn to deal with my stuff. so what i came up with is:

Also there is another thing: why would you create the possibility to use directFn if the number of arguments change and no type of action parameter is sent?

what i mean is:
read sends only parameter to directFn (or api.read) that is the params of the store (limit,order, baseParams, etc).
create sends also only parameter which is the data created.
update on other side sends two parameters which are the ID of the record updated and the data that was changed.
and last but not least, destroy sends one parameter - ID of record deleted.
using the Ext.Direct provider (i use the php backend), when defining a server side call to a method, we define the number of arguments it accepts, so it throws an exception when i try to send less arguments that it needs (if I define them as 2).

so just to elaborate:
directFn works if you don't intend to create,update or destroy any data (meaning you will only read data from the server), otherwise we need to use the api configuration object and expose 4 server side methods to manage the requests (sending xaction would have helped a bit) :(
And, I still kinda like my approach ( which i need to revise a bit ). It works with directFn or api, and always passes one parameter to the directFn.