[Engine-devel] Using REST API in web UI - review call summary

Antoni Segura Puimedon asegurap at redhat.com
Sun Nov 24 09:45:15 UTC 2013



----- Original Message -----
> From: "Michael Pasternak" <mpastern at redhat.com>
> To: "Itamar Heim" <iheim at redhat.com>
> Cc: "engine-devel" <engine-devel at ovirt.org>
> Sent: Sunday, November 24, 2013 9:37:22 AM
> Subject: Re: [Engine-devel] Using REST API in web UI - review call summary
> 
> On 11/22/2013 12:00 AM, Itamar Heim wrote:
> > On 11/21/2013 11:56 PM, Vojtech Szocs wrote:
> >>
> >>
> >> ----- Original Message -----
> >>> From: "Itamar Heim" <iheim at redhat.com>
> >>> To: "Vojtech Szocs" <vszocs at redhat.com>, "engine-devel"
> >>> <engine-devel at ovirt.org>
> >>> Cc: "Einav Cohen" <ecohen at 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.
> > 
> >>
> >>>
> >>> 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?
> 
> currently it's about adding adding extra information (by supplying header
> [1]),
> this is driven by the properties that require extra query against the engine
> to
> fill them,
> 
> obviously the default is [2]
> 
> [1] All-Content: True
> [2] All-Content: False
> 
> >>
> >> 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 :)
> 
> we talked about this solution couple of years ago, but it was obvious
> that there is no real "demand" for it till UI moves to REST,
> 
> btw it won't solve the problem where to fill UI entity you need combination
> of N REST entities, you still will have to perform N + 1 queries to API
> (maybe asking for entity with fewer details), - all it address is a capacity
> of the data being send.

For this problem of content filtering and retrieve associated data in a "restful"
way I saw Yoga http://yoga.skyscreamer.org/

some example usage: http://www.infoq.com/articles/json-yoga

> 
> > 
> > michael?
> > 
> >>
> >>>
> >>> Good luck,
> >>>      Itamar
> >>>
> > 
> 
> 
> --
> 
> Michael Pasternak
> RedHat, ENG-Virtualization R&D
> _______________________________________________
> Engine-devel mailing list
> Engine-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/engine-devel
> 



More information about the Devel mailing list