----- Original Message ----- > From: "Itamar Heim" <ih...@redhat.com> > To: "Vojtech Szocs" <vsz...@redhat.com> > Cc: "engine-devel" <engine-devel@ovirt.org>, "Einav Cohen" > <eco...@redhat.com>, "Michael Pasternak" > <mpast...@redhat.com> > Sent: Thursday, November 21, 2013 11:00:25 PM > Subject: Re: Using REST API in web UI - review call summary > > On 11/21/2013 11:56 PM, Vojtech Szocs wrote: > > > > > > ----- Original Message ----- > >> From: "Itamar Heim" <ih...@redhat.com> > >> To: "Vojtech Szocs" <vsz...@redhat.com>, "engine-devel" > >> <engine-devel@ovirt.org> > >> Cc: "Einav Cohen" <eco...@redhat.com> > >> Sent: Thursday, November 21, 2013 10:25:04 PM > >> Subject: Re: Using REST API in web UI - review call summary > >> > >> On 11/21/2013 11:18 PM, Vojtech Szocs wrote: > >>> Hi guys, > >>> > >>> this is a summary of yesterday's review call, I'll try to highlight > >>> important Q/A and things we agreed on. Feel free to add anything in case > >>> I've missed something. > >>> > >>> -- > >>> > >>> Q: Why don't we simply try to use existing Java SDK and adapt it for GWT > >>> apps? (asked by Michael & Gilad) > >>> > >>> A: This might be a viable option to consider if we wanted to skip > >>> JavaScript-based SDK altogether and target Java/GWT code directly; we > >>> could simply take Java SDK and customize its abstractions where > >>> necessary, > >>> i.e. using HTTP transport layer implementation that works with GWT. In > >>> any > >>> case, this would mean coupling ourselves to Java SDK (which has its own > >>> release cycle) and I think this would complicate things for us. > >>> > >>> As proposed on the meeting, I think it's best to aim for JavaScript SDK > >>> as > >>> the lowest common denominator for *any* web application that wants to > >>> work > >>> with REST API. oVirt GWT-based UI can simply bind to JavaScript SDK, i.e. > >>> Java/GWT code that just overlays objects and functions provided by > >>> JavaScript SDK. Another reason is ease of maintenance - I'd rather see > >>> JavaScript SDK's code generation process to be independent of any other > >>> SDK (people responsible for maintaining JavaScript SDK should have full > >>> control over generated code). > >>> > >>> -- > >>> > >>> Q: What about functionality currently used by oVirt UI but not supported > >>> by > >>> REST API? (asked by Einav) > >>> [For example, fetching VM entity over GWT RPC also returns related > >>> data > >>> such as Cluster name.] > >>> > >>> A: Based on discussion I've had with other colleagues after yesterday's > >>> review call, I don't think that separate support-like backend layer is a > >>> good idea. Instead, this is the kind of functionality that could be > >>> placed > >>> in oVirt.js library. Logical operations like "get VMs and related data" > >>> would be exposed through oVirt.js (callback-based) API and ultimately > >>> realized as multiple physical requests to REST API via JavaScript > >>> Binding. > >>> > >>> oVirt.js client would be completely oblivious to the fact that multiple > >>> physical requests are dispatched. In fact, since HTTP communication is > >>> asynchronous in nature, oVirt.js client wouldn't even notice any > >>> difference in terms of API consumption. This assumes JavaScript SDK would > >>> use callback-based (non-blocking) API instead of blocking one - after > >>> all, > >>> blocking API on top of non-blocking implementation sounds pretty much > >>> like > >>> leaky abstraction [1]. > >>> > >>> For example: > >>> > >>> sdk.getVmsWithExtraData( > >>> callbackToGetExtraDataForGivenVm, // might cause extra physical > >>> requests to REST API > >>> callbackFiredWhenAllDataIsReady // update client only when > >>> all > >>> data is ready > >>> ) > >> > >> would this also resolve RunMultipleActions? > > > > Yes, I think so. There could be API to pass multiple "actions" and get > > notified when they complete. > > > >> sounds like no reason to have RunMultipleQueries, although i'm still > >> sure a single call to engine for multiple keys would be much more > >> efficient than multiple async calls? > >> (I understand we may not be able to model this). > > > > Efficiency-wise, yes, single call to get all data seems optimal. API-wise, > > I don't think it really matters from oVirt.js client perspective. > > > > We can proceed with simple (possibly inefficient) solution and improve as > > needed. We're making baby steps now.. > > > >> > >>> > >>> [1] http://en.wikipedia.org/wiki/Leaky_abstraction > >>> > >>> -- > >>> > >>> Last but not least, where to maintain JavaScript SDK projects: low-level > >>> JavaScript Binding + high-level oVirt.js library. > >>> > >>> I agree that conceptually both above mentioned projects should go into > >>> dedicated "ovirt-engine-sdk-js" git repository and have their own > >>> build/release process. However, for now, we're just making baby steps so > >>> let's keep things simple and prototype these projects as part of > >>> "ovirt-engine" git repository. > >>> > >>> ... we can complicate things anytime, but we should know that any complex > >>> system that works has inevitably evolved from simple system that works > >>> ... > >>> (quote from http://en.wikipedia.org/wiki/Gall%27s_law) > >> > >> I think the entities should just be generated from the xsd. > > > > +1 > > > > The JavaScript Binding (aka low-level SDK) module should follow same > > concepts as existing Java SDK - generated entities decorated with > > operations to form fluent API. > > > > Everything Java SDK currently offers should be available in JavaScript > > Binding. oVirt.js is our opportunity to build on top of that. > > > >> for the rsdl, makes sense to start with clean code to see what works > >> best, then see about generating it (but you should adhere the rsdl as > >> guidlines i guess). > > > > +1 > > > > The initial prototype should be written by hand, things will get generated > > as soon as we have better idea how the end result should look like. > > i can understand that for the methods and maybe for populating the > entities for the first few. > the entities themselves, no point in hand coding - just generated them > from the api.xsd. > and once you decide how you want to fill them, not worth hand coding > this - either json gives this out of the box, or should be generated as > well.
OK, now I get you :) sure, entities aren't too interesting by themselves, but populating (decorating) them is something that requires more thought. > > > > >> > >> lets try to plan for lightweight entities while at it - the API has a > >> mechanism for different level of details - maybe we need a custom level > >> where the client specifies which fields they want back or something like > >> that. > > > > Good idea! We should definitely think about the granularity of entities. > > > > I didn't know REST API supports different level of detail per entity, is > > there some documentation for this feature? > > > > Since JavaScript is dynamic, one possible solution would be to let client > > define the entity structure (i.e. what data client needs) on the fly, > > during runtime :) > > michael? > > > > >> > >> Good luck, > >> Itamar > >> > > _______________________________________________ Engine-devel mailing list Engine-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-devel