Announcing oVirt.js prototype

------=_Part_23636581_113868456.1403014414461 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hello everyone, in past few weeks, we've been working on JavaScript SDK for oVirt Engine. Today, I'm happy to announce the first prototype called oVirt.js :) Attached, there's an "sdk-testdrive" UI plugin which: - bundles oVirt.js prototype [ovirt.js] - contains test code for DataCenter object [plugin.js] To install this plugin, simply copy (or symlink) sdk-testdrive.json file and sdk-testdrive-resources directory under /usr/share/ovirt-engine/ui-plugins. Following is a quick recap of test code exercising oVirt.js. To add new DataCenter: // Obtain DataCenter resource collection. // Resource collection is a handle to work with RESTful objects. var dcColl = ovirt.api.datacenters; // Obtain "add DataCenter" operation. // Operation is a reusable, uhm, operation, backed by HTTP request. // You can run the same operation multiple times, if necessary. var addOp = dcColl.add({ name: 'test-dc', local: false }); // Register result handler and run the operation. addOp.success(dcAddedCallback).run(); // Example of operation result handler that receives a single resource. function dcAddedCallback (dc) { console.log('Added: ' + dc.data().name); } In dcAddedCallback function shown above, "dc" is a resource object, representing a handle to work with RESTful DataCenter object. It provides access to underlying resource data: var dcDataObj = dc.data(); // Get var dcName = dcDataObj.name; var dcDesc = dcDataObj.description; // Set multiple properties at once ... dc.data({ name: 'test-dc-updated', description: 'test' }); // ... or one by one dcDataObj.name = 'test-dc-updated'; dcDataObj.description = 'test'; It also gives access to nested collections (if any) and supported actions (if any): // Obtain Cluster resource collection for given DataCenter. var dcClusterColl = dc.clusters; oVirt.js is currently only 445 lines of code, yey :) we're not using any code generation at this point, we're simply relying on HATEOAS [1] principle of REST and dynamically augmenting resource objects with nested collections and supported actions, which are part of resource representation. [1] http://en.wikipedia.org/wiki/HATEOAS I feel we'll eventually come to a point where code generation can be useful, but for now, we're trying to keep things small and simple. oVirt.js currently uses Lo-Dash library [2] containing various utility functions. I think that Lo-Dash is great because it makes working with JavaScript a bit easier. [2] http://lodash.com/ Overall, oVirt.js will be self-contained, which means there will be no additional dependencies from JavaScript perspective. Using oVirt.js in HTML page will be as simple as this: <script src="ovirt.js"></script> This means that (build-time) dependencies such as Lo-Dash will be inlined into resulting oVirt.js build. We're also planning to provide minified version + Source Maps for better debugging. oVirt.js is planned to be usable NOT ONLY in web browsers. In fact, there's "ovirt.svc" namespace containing services used by oVirt.js API implementation. You (or any 3rd party extension) can override these services to achieve SDK portability for given runtime environment. In other words, I'd love to see oVirt.js used also with Node.js :) Finally, an important thing to mention - oVirt.js requires AT LEAST ECMAScript 5.1 compliant environment. All modern browsers support ES5, including IE9+. Unfortunately, IE9 doesn't support ES5 Strict Mode, but that's not that big of a deal. I'll send some more emails outlining implementation design and also how to manage source control & distribution of oVirt.js. Regards, Vojtech ------=_Part_23636581_113868456.1403014414461 Content-Type: application/x-compressed-tar; name=ovirt-js-sdk.tar.gz Content-Disposition: attachment; filename=ovirt-js-sdk.tar.gz Content-Transfer-Encoding: base64 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 cn25vlz/5df/AadgwuoAXAAA ------=_Part_23636581_113868456.1403014414461--
participants (1)
-
Vojtech Szocs