-
Notifications
You must be signed in to change notification settings - Fork 1
RPC and JavaScript APIs
Woko has built-in support for AJAX via its RPC services, that can be accessed over HTTP, or using a dedicated JavaScript API.
All CRUD operations (load, save, delete, search, list) are available remoteloy through dedicated services. All you can do in the “developer” interface can be done via RPC calls.
You can also invoke your own Resolution Facets in an AJAX fashion : Woko provides a mechanism to write Resolution Facets that can return either HTML or JSON data depending on the caller.
Return a POJO as JSON, using the json facet on it.
http://.../view/MyClass/123?isRpc=true
Persists a POJO and returns it as JSON.
http://.../save/MyClass?isRpc=true&object.id=123&object.prop=foobar...
Removes a POJO from persistent storage, and returns a confirmation object.
http://.../delete/MyClass/123?isRpc=true&facet.confirm=true
List instances of a class, returning the structure as JSON (includes total counts and other pagination data).
http://.../list/MyClass?isRpc=true&facet.resultsPerPage=100&facet.page=0
Full text search, returned as JSON result.
http://.../search?isRpc=true&facet.query=moby&facet.resultsPerPage=100&facet.page=0
Of course, you can also invoke your own facets over HTTP (TODO explain RpcResolution for how to return resolutions from your facets that handle both HTML and JSON outputs).
All the services mentionned above can be reached using a dedicated JavaScript API :
<script src="./woko/js/woko.base.js"></script>
<script src="./woko/js/woko.rpc.js"></script>
var cli = new woko.rpc.Client({baseUrl:"/woko-webtests"});
cli.save({
className:"MyBook",
obj: {
_id: 1234,
name: "Moby Dick"
},
load: function(savedBook) {
log(new Date() + " - Save1 : id = " + savedBook._id + " name = " + savedBook.name);
// load the saved book
cli.load({
className: "MyBook",
key: 1234,
load: function(loadedBook) {
log(new Date() + " - Reload : id = " + loadedBook._id + " name = " + loadedBook.name);
// update a property
loadedBook.nbPages = "123";
loadedBook.name = "tower";
// save the book again
cli.save({
obj: loadedBook,
load: function(savedBook2) {
log(new Date() + " - Save2 : id = " + loadedBook._id + " name = " + loadedBook.name);
// delete the book
cli.remove({
obj: savedBook2,
load: function(result) {
log(new Date() + " - Deleted : id = " + savedBook2._id + " name = " + savedBook2.name + " (success = " + result.success + ")");
var loader = dojo.byId("loader");
loader.innerHTML = "loaded";
dojo.removeClass(loader, "loading");
dojo.addClass(loader, "loaded");
}
});
}
});
}
});
}
});