[openstack-dev] [horizon] REST and Django
Richard Jones
r1chardj0n3s at gmail.com
Tue Dec 2 05:39:24 UTC 2014
On Mon Dec 01 2014 at 4:18:42 PM Thai Q Tran <tqtran at us.ibm.com> wrote:
> I agree that keeping the API layer thin would be ideal. I should add that
> having discrete API calls would allow dynamic population of table. However,
> I will make a case where it *might* be necessary to add additional APIs.
> Consider that you want to delete 3 items in a given table.
>
> If you do this on the client side, you would need to perform: n * (1 API
> request + 1 AJAX request)
> If you have some logic on the server side that batch delete actions: n *
> (1 API request) + 1 AJAX request
>
> Consider the following:
> n = 1, client = 2 trips, server = 2 trips
> n = 3, client = 6 trips, server = 4 trips
> n = 10, client = 20 trips, server = 11 trips
> n = 100, client = 200 trips, server 101 trips
>
> As you can see, this does not scale very well.... something to consider...
>
Yep, though in the above cases the client is still going to be hanging,
waiting for those server-backend calls, with no feedback until it's all
done. I would hope that the client-server call overhead is minimal, but I
guess that's probably wishful thinking when in the land of random Internet
users hitting some provider's Horizon :)
So yeah, having mulled it over myself I agree that it's useful to have
batch operations implemented in the POST handler, the most common operation
being DELETE.
Maybe one day we could transition to a batch call with user feedback using
a websocket connection.
Richard
> [image: Inactive hide details for Richard Jones ---11/27/2014 05:38:53
> PM---On Fri Nov 28 2014 at 5:58:00 AM Tripp, Travis S <travis.tr]Richard
> Jones ---11/27/2014 05:38:53 PM---On Fri Nov 28 2014 at 5:58:00 AM Tripp,
> Travis S <travis.tripp at hp.com> wrote:
>
> From: Richard Jones <r1chardj0n3s at gmail.com>
> To: "Tripp, Travis S" <travis.tripp at hp.com>, OpenStack List <
> openstack-dev at lists.openstack.org>
> Date: 11/27/2014 05:38 PM
> Subject: Re: [openstack-dev] [horizon] REST and Django
> ------------------------------
>
>
>
>
> On Fri Nov 28 2014 at 5:58:00 AM Tripp, Travis S <*travis.tripp at hp.com*
> <travis.tripp at hp.com>> wrote:
>
> Hi Richard,
>
> You are right, we should put this out on the main ML, so copying
> thread out to there. ML: FYI that this started after some impromptu IRC
> discussions about a specific patch led into an impromptu google hangout
> discussion with all the people on the thread below.
>
>
> Thanks Travis!
>
>
>
> As I mentioned in the review[1], Thai and I were mainly discussing the
> possible performance implications of network hops from client to horizon
> server and whether or not any aggregation should occur server side. In
> other words, some views require several APIs to be queried before any data
> can displayed and it would eliminate some extra network requests from
> client to server if some of the data was first collected on the server side
> across service APIs. For example, the launch instance wizard will need to
> collect data from quite a few APIs before even the first step is displayed
> (I’ve listed those out in the blueprint [2]).
>
> The flip side to that (as you also pointed out) is that if we keep the
> API’s fine grained then the wizard will be able to optimize in one place
> the calls for data as it is needed. For example, the first step may only
> need half of the API calls. It also could lead to perceived performance
> increases just due to the wizard making a call for different data
> independently and displaying it as soon as it can.
>
>
> Indeed, looking at the current launch wizard code it seems like you
> wouldn't need to load all that data for the wizard to be displayed, since
> only some subset of it would be necessary to display any given panel of the
> wizard.
>
>
>
> I tend to lean towards your POV and starting with discrete API calls
> and letting the client optimize calls. If there are performance problems
> or other reasons then doing data aggregation on the server side could be
> considered at that point.
>
>
> I'm glad to hear it. I'm a fan of optimising when necessary, and not
> beforehand :)
>
>
>
> Of course if anybody is able to do some performance testing between
> the two approaches then that could affect the direction taken.
>
>
> I would certainly like to see us take some measurements when performance
> issues pop up. Optimising without solid metrics is bad idea :)
>
>
> Richard
>
>
>
>
> [1]
> *https://review.openstack.org/#/c/136676/8/openstack_dashboard/api/rest/urls.py*
> <https://review.openstack.org/#/c/136676/8/openstack_dashboard/api/rest/urls.py>
> [2]
> *https://blueprints.launchpad.net/horizon/+spec/launch-instance-redesign*
> <https://blueprints.launchpad.net/horizon/+spec/launch-instance-redesign>
>
> -Travis
>
> *From: *Richard Jones <*r1chardj0n3s at gmail.com*
> <r1chardj0n3s at gmail.com>>
> * Date: *Wednesday, November 26, 2014 at 11:55 PM
> * To: *Travis Tripp <*travis.tripp at hp.com* <travis.tripp at hp.com>>, Thai Q
> Tran/Silicon Valley/IBM <*tqtran at us.ibm.com* <tqtran at us.ibm.com>>,
> David Lyle <*dklyle0 at gmail.com* <dklyle0 at gmail.com>>, Maxime Vidori <
> *maxime.vidori at enovance.com* <maxime.vidori at enovance.com>>,
> "Wroblewski, Szymon" <*szymon.wroblewski at intel.com*
> <szymon.wroblewski at intel.com>>, "Wood, Matthew David (HP Cloud -
> Horizon)" <*matt.wood at hp.com* <matt.wood at hp.com>>, "Chen, Shaoquan" <
> *sean.chen2 at hp.com* <sean.chen2 at hp.com>>, "Farina, Matt (HP Cloud)" <
> *matthew.farina at hp.com* <matthew.farina at hp.com>>, Cindy Lu/Silicon
> Valley/IBM <*clu at us.ibm.com* <clu at us.ibm.com>>, Justin
> Pomeroy/Rochester/IBM <*jpomero at us.ibm.com* <jpomero at us.ibm.com>>,
> Neill Cox <*neill.cox at ingenious.com.au* <neill.cox at ingenious.com.au>>
> * Subject: *Re: REST and Django
>
> I'm not sure whether this is the appropriate place to discuss this, or
> whether I should be posting to the list under [Horizon] but I think we need
> to have a clear idea of what goes in the REST API and what goes in the
> client (angular) code.
>
> In my mind, the thinner the REST API the better. Indeed if we can get
> away with proxying requests through without touching any *client code, that
> would be great.
>
> Coding additional logic into the REST API means that a developer would
> need to look in two places, instead of one, to determine what was happening
> for a particular call. If we keep it thin then the API presented to the
> client developer is very, very similar to the API presented by the
> services. Minimum surprise.
>
> Your thoughts?
>
>
> Richard
>
>
> On Wed Nov 26 2014 at 2:40:52 PM Richard Jones <
> *r1chardj0n3s at gmail.com* <r1chardj0n3s at gmail.com>> wrote:
>
>
> Thanks for the great summary, Travis.
>
> I've completed the work I pledged this morning, so now the REST API
> change set has:
>
> - no rest framework dependency
> - AJAX scaffolding in openstack_dashboard.api.rest.utils
> - code in openstack_dashboard/api/rest/
> - renamed the API from "identity" to "keystone" to be consistent
> - added a sample of testing, mostly for my own sanity to check
> things were working
>
> *https://review.openstack.org/#/c/136676*
> <https://review.openstack.org/#/c/136676>
>
>
> Richard
>
> On Wed Nov 26 2014 at 12:18:25 PM Tripp, Travis S <
> *travis.tripp at hp.com* <travis.tripp at hp.com>> wrote:
>
>
> Hello all,
>
> Great discussion on the REST urls today! I think that we are on
> track to come to a common REST API usage pattern. To provide quick summary:
>
> We all agreed that going to a straight REST pattern rather than
> through tables was a good idea. We discussed using direct get / post in
> Django views like what Max originally used[1][2] and Thai also started[3]
> with the identity table rework or to go with djangorestframework [5] like
> what Richard was prototyping with[4].
>
> The main things we would use from Django Rest Framework were
> built in JSON serialization (avoid boilerplate), better exception handling,
> and some request wrapping. However, we all weren’t sure about the need for
> a full new framework just for that. At the end of the conversation, we
> decided that it was a cleaner approach, but Richard would see if he could
> provide some utility code to do that much for us without requiring the full
> framework. David voiced that he doesn’t want us building out a whole
> framework on our own either.
>
> So, Richard will do some investigation during his day today and
> get back to us. Whatever the case, we’ll get a patch in horizon for the
> base dependency (framework or Richard’s utilities) that both Thai’s work
> and the launch instance work is dependent upon. We’ll build REST style
> API’s using the same pattern. We will likely put the rest api’s in
> horizon/openstack_dashboard/api/rest/.
>
> [1]
> *https://review.openstack.org/#/c/133178/1/openstack_dashboard/workflow/keypair.py*
> <https://review.openstack.org/#/c/133178/1/openstack_dashboard/workflow/keypair.py>
> [2]
> *https://review.openstack.org/#/c/133178/1/openstack_dashboard/workflow/launch.py*
> <https://review.openstack.org/#/c/133178/1/openstack_dashboard/workflow/launch.py>
> [3]
> *https://review.openstack.org/#/c/133767/8/openstack_dashboard/dashboards/identity/users/views.py*
> <https://review.openstack.org/#/c/133767/8/openstack_dashboard/dashboards/identity/users/views.py>
> [4]
> *https://review.openstack.org/#/c/136676/4/openstack_dashboard/rest_api/identity.py*
> <https://review.openstack.org/#/c/136676/4/openstack_dashboard/rest_api/identity.py>
> [5] *http://www.django-rest-framework.org/*
> <http://www.django-rest-framework.org/>
>
> Thanks,
>
>
> Travis_______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev at lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20141202/83547fed/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20141202/83547fed/attachment.gif>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: graycol.gif
Type: image/gif
Size: 105 bytes
Desc: not available
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20141202/83547fed/attachment-0001.gif>
More information about the OpenStack-dev
mailing list