On 02/24/2013 09:05 AM, Oved Ourfalli wrote:
> 
> 
> ----- Original Message -----
>> From: "Doron Fediuck" <dfedi...@redhat.com>
>> To: "Michael Pasternak" <mpast...@redhat.com>
>> Cc: engine-devel@ovirt.org, a...@ovirt.org
>> Sent: Thursday, February 21, 2013 6:54:59 PM
>> Subject: Re: [Engine-devel] REST API calls from
>>
>>
>>
>> ----- Original Message -----
>>> From: "Michael Pasternak" <mpast...@redhat.com>
>>> To: "Doron Fediuck" <dfedi...@redhat.com>
>>> Cc: engine-devel@ovirt.org, a...@ovirt.org
>>> Sent: Wednesday, February 20, 2013 2:56:59 PM
>>> Subject: Re: [Engine-devel] REST API calls from
>>>
>>> On 02/14/2013 11:20 AM, Doron Fediuck wrote:
>>>>
>>>>
>>>> ----- Original Message -----
>>>>> From: "Michael Pasternak" <mpast...@redhat.com>
>>>>> To: "Libor Spevak" <lspe...@redhat.com>
>>>>> Cc: engine-devel@ovirt.org, a...@ovirt.org
>>>>> Sent: Wednesday, February 13, 2013 12:55:36 PM
>>>>> Subject: Re: [Engine-devel] REST API calls from the GUI
>>>>>
>>>>>
>>>>> Hi Libor,
>>>>>
>>>>> This issue came across in one of the conversations i had with UX
>>>>> folks, but since we didn't end
>>>>> up with any conclusion/road map (nor discussed it properly to
>>>>> hear
>>>>> other thoughts), this is a perfect
>>>>> place to start this discussion,
>>>>>
>>>>> Intuitively REST is a way to go with GWT AJAX calls
>>>>> ---------------------------------------------------
>>>>>
>>>>> pros
>>>>> ====
>>>>>
>>>>> - api data objects can be reused by generating java classes
>>>>> (using
>>>>> jaxb) from the rest schema [1]
>>>>> - no backend logic will be duplicated as api abstracts the
>>>>> backend
>>>>> exposing RESTful collection/resources to operate on
>>>>> - development against api is "easy" as api describes itself in
>>>>> RSDL
>>>>> [2]
>>>>>
>>>>> cons
>>>>> ====
>>>>>
>>>>> - implementing transport layer (HTTP) under GWT
>>>>> - implementing own j2xml/json/yaml/... marshalling layer
>>>>> - implementing own error handling mechanism
>>>>> - implementing REST callback mechanism (in GWT)
>>>>> - constant maintenance of the data objects generated from the
>>>>> api
>>>>> - painful for Java developers
>>>>>
>>>>> Java-SDK
>>>>> --------
>>>>>
>>>>> pros
>>>>> ====
>>>>>
>>>>> - abstracts transport layer (leaving developer in standard Java
>>>>> api)
>>>>> - typesafe code (no need to mess with XML bulks)
>>>>> - has own data objects to work with
>>>>> - abstracts authentication/authorization
>>>>> (kerberos/cookie/session/etc.)
>>>>> - since SDK is auto-generated, it can be easily extended with
>>>>> required
>>>>>   features to support UI (such as callback infrastructure for
>>>>>   instance)
>>>>>
>>>>> cons
>>>>> ====
>>>>>
>>>>> - has to be converted in to Javascript (not sure what the
>>>>> impacts
>>>>> are
>>>>> in terms of AJAX calls/etc.)
>>>>> - probably much more cons that we're not aware of and will have
>>>>> to
>>>>> figure out with POC
>>>>>
>>>>>
>>>>> thoughts?
>>>>>
>>>>> [1] http[s]://server[:port]/api?schema
>>>>> [2] http[s]://server[:port]/api?rsdl
>>>>>
>>>>
>>>> Although started as a UI request, there are other needs who wish
>>>> to use API calls with a different transport. For example a
>>>> backend
>>>> hook which gets a REST entry point it can use to fetch for
>>>> additional
>>>> data, or perform actions. In this case I'd expect an internal
>>>> connection
>>>> rather than creating additional connections.
>>>> How would you resolve it generically enough in this context?
>>>
>>> Doron,
>>>
>>> I believe your approach a bit different, UX folks seeking for a
>>> convenient
>>> way of communicating with ovirt public api, e.g closing api<->GUI
>>> gap, and
>>> theirs alternatives where native HTTP layer or Java-SDK based
>>> framework,
>>> while what you need is in-process channel to communicate with the
>>> engine itself,
>>>
>>> i understanding your will of using stable api for this (RESTapi),
>>> but
>>> not
>>> sure that doing this via JavaSDK is a good way to go simply because
>>> SDK is
>>> designed to operate in a client-space, while what you need is a
>>> server-space
>>> bridge for that.
>>>
>>
>> Michael, true but...
>> Thinking about it differently both UI and hooks needs a client.
>> The underlying protocols should be abstracted. This is something
>> which will serve other functions as well.
>>
> 
> I'm not sure we would need a new abstraction here.
> Both UI plugins and engine plugins need some API to do basic operations, and 
> have access to different properties in the engine.

+1, that's exactly what i've suggested to begin with.

> In the UI plguins implementation, we gave this API, and in addition created a 
> REST session to be used in order to do more sophisticated operations.
> I think we should probably do the same for engine plugins, 
> giving the basic API, and giving a REST session for more advanced operations.
> The engine plugin may also have another 3rd party application it interacts 
> with, and it would be able to share this session with it, 
> allowing it to perform different operations on the engine. It would obviously 
> be easy to do that using the Java SDK in the engine side,
> without creating a new layer of abstraction.

true, but the thing is that java-sdk designed to work with rest-api, and what 
Doron is trying to do
is saving round-trip of engine->sdk->api->engine by enabling extra layer in sdk 
that will work not via HTTP,
but natively with RESTeasy (REST framework we using in api), the disadvantages 
of such design are:

1. working with java-sdk via JNI (walking out from container to client 
application - sdk)
2. hacking RESTeasy by:
   2.1 working with underlying (not public/backward compatible) interfaces & 
using JNI as well
   2.2 most likely maintaining code working with RESTeasy on every new 
(RESTeasy) release by reverse
       engineering new changes/behaviour of this framework
   2.3 making assumptions on code invocations to emulate GET/POST/PUT/DELETE 
HTTP calls
   2.4 still having round-trip engine->sdk->RESTeasy->engine

therefore i think that having own private API in engine for that is a much 
better solution.

> I assume the 3rd party application will use either the Java SDK, or another 
> one, according the platform it is built upon, and in the "worst case", will 
> interact directly with the API.
> 
> 
>>>>
>>>>> On 02/12/2013 06:13 PM, Libor Spevak wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I would like to ask, if there have been discussions about an
>>>>>> option
>>>>>> to call REST API services directly from the Frontend (GWT
>>>>>> layer)?
>>>>>> GWT compiles Java frontend-side to
>>>>>> Javascript, calls to backend services are performed
>>>>>> "transparently"
>>>>>> by the framework using AJAX support. But, there is still a need
>>>>>> to
>>>>>> have a special set of data objects
>>>>>> and the server-side logic can duplicate.
>>>>>>
>>>>>> Java REST API SDK enables to build "thick" client. The calls
>>>>>> are
>>>>>> realized using e.g. Apache HttClient and supported libraries. I
>>>>>> think the requirements of GWT can be a
>>>>>> little bit different, but something overlaps.
>>>>>>
>>>>>> I found several links about REST API support from GWT, so there
>>>>>> is
>>>>>> something for inspiration...
>>>>>>
>>>>>> - http://www.spiffyui.org/
>>>>>> - http://www.zackgrossbart.com/hackito/gwt-rest/
>>>>>> - http://code.google.com/p/gwt-rest/
>>>>>> - http://restygwt.fusesource.org/
>>>>>>
>>>>>> But, do you think it would be useful and what drawbacks can
>>>>>> occur
>>>>>> (authentication, authorization, response times, need to support
>>>>>> larger set of services, painful
>>>>>> refactoring, ...)?
>>>>>>
>>>>>> Regards,
>>>>>> Libor
>>>>>>
>> _______________________________________________
>> Engine-devel mailing list
>> Engine-devel@ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/engine-devel
>>


-- 

Michael Pasternak
RedHat, ENG-Virtualization R&D
_______________________________________________
Engine-devel mailing list
Engine-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-devel

Reply via email to