I am using amplify.request, and I would like to have CRUD-like URLs when sending data to and from the server. Here is an example:
Defining the resource
resources = {
"document_create" : ['/d/crud/', "POST"],
"document_read" : ['/d/crud/{id}', "GET"],
"document_update" : ['/d/crud/{id}', "PUT"],
"document_delete" : ['/d/crud/{id}', "DELETE"]
};
$.each(resources, function (resource, settings) {
definition = {
url : settings[0],
type : settings[1],
dataType: "json", // what comes back
decoder : 'jsend',
contentType: 'application/json' // what goes there
};
amplify.request.define(resource, "ajax", definition);
});
Employing the resource
function make_request(resource, params, success_cb, error_cb) {
if (this.is_post(resource)) {
// this.is_post is a test, defined elsewhere, to see if this is a POST request
params = JSON.stringify(params);
}
amplify.request(
resourceId: resource
data: params
success: success_cb
error: error_cb
);
}
This works fine for create
and read
and `delete, like-so:
make_request('document_delete', {id: 1}, cb)
However, for update
, since the content is being passed as JSON, the URL substitution does not occur as intended.
Is there a way to take advantage of the URL substitution for {id}
in the above scheme?
The only alternative I can think of is to pass the data to the server URL-encoded. Unfortunately this is somewhat problematic, and I would prefer to be able to retain the use of CRUD-like URLs and saving with JSON formatted data, if that is possible.
Thoughts would be appreciated.