> On Nov 5, 2013, at 11:26 AM, Doug Hellmann <doug.hellm...@dreamhost.com> > wrote: > > > > >> On Tue, Nov 5, 2013 at 10:37 AM, Jay Pipes <jaypi...@gmail.com> wrote: >> Doug, I respect you very much as an engineer and as a community member, so I >> want to preface this with a very important dislaimer: don't take these >> opinions as anything more than what they are...a discussion of differing >> viewpoints. > > Ditto. :-) > >> >> Comments inline. >> >> >>> On 11/04/2013 06:58 PM, Doug Hellmann wrote: >>> On Sun, Nov 3, 2013 at 10:54 PM, Jay Pipes <jaypi...@gmail.com >>> <mailto:jaypi...@gmail.com>> wrote: >>> >>> On 11/02/2013 11:26 PM, Russell Bryant wrote: >>> >>> On 11/02/2013 11:54 AM, Adrian Otto wrote: >>> >>> Noorul, >>> >>> I agree that key decisions should be tracked in blueprints. >>> This is the >>> one for this decision which was made in our 2013-10-18 >>> public meeting. >>> Jay's submission is consistent with the direction indicated >>> by the team. >>> >>> https://blueprints.launchpad.__net/solum/+spec/rest-api-base >>> <https://blueprints.launchpad.net/solum/+spec/rest-api-base> >>> >>> Transcript log: >>> http://irclogs.solum.io/2013/__solum.2013-10-08-16.01.log.__html >>> <http://irclogs.solum.io/2013/solum.2013-10-08-16.01.log.html> >>> >>> <http://irclogs.solum.io/2013/__solum.2013-10-08-16.01.log.__html >>> >>> <http://irclogs.solum.io/2013/solum.2013-10-08-16.01.log.html>> >>> >>> >>> Heh, not much discussion there. :-) >>> >>> >>> Agreed. I actually didn't know anything about the discussion -- I >>> wasn't at the meeting. I just figured I would throw some example >>> code up to Gerrit that shows how Falcon can be used for the API >>> plumbing. Like I mentioned in a previous email, I believe it's much >>> easier to discuss things when there is sample code... >>> >>> >>> Here's my take ... Pecan+WSME has been pushed as the thing to >>> standardize on across most OpenStack APIs. Ceilometer (and maybe >>> others?) are already using it. Others, such as Nova, are >>> planning to >>> use it this cycle. [1][2] >>> >>> >>> I've used both actually, and I've come to prefer Falcon because of >>> its simplicity and specifically because of the following things: >>> >>> * It's lack of integration with WSME, which I don't care for. I >>> don't care for WSME because I believe it tries to put the model at >>> the view layer, instead of where it belongs, at the model layer. >>> >>> >>> The "models" defined in WSME are completely different from the database >>> models, and should not be used outside of the API code. Think of them as >>> declaring the models for the consumer of the API, rather than the >>> implementer of the API. >> >> I don't really see the point of the distinction. At the end of the day, the >> consumer of the API is using the API to manipulate and retrieve data. That >> data is really the model, with some syntactic sugar like Atom links, etc. >> Even in a control API -- as opposed to a data API like Glance, Ceilometer or >> Swift -- the benefits of a heavy API layer like Pecan and WSME are pretty >> small, IMO. > > That approach binds your API tightly to the database representation, which we > were trying to avoid. > >> >> I would much rather see the Ceilometer models [1] actually be models that >> can validate the data that is used to construct the model object instead of >> having duplicated WSME "models" repeated in the WSGI controller code [2]. >> The reason is because if/when I decide to make a Ceilometer API that uses a >> different protocol, say AMQP, instead of HTTP, now I need to duplicate all >> of the validation code that WSME is providing on the data model layer... >> however if the validation was in the models themselves, I could easily >> create an API on a different protocol using just the models for validation. > > We do that in some cases. However, there is also a difference in some cases > between the validation at the API layer (a value must be a number, or a UUID, > etc.) and the validation in the database layer (a number must fall within a > range or a UUID must refer to an existing object). So there is a place for > both, and the validation done in the WSME classes is not meant to be the only > validation performed.
+1 here - translation of a string to a uuid for use with a domain model is a good example of why a view model and a domain model exist. This is a practical concern that almost always comes up during API evolution. > >> >> >>> The benefits of declaring WSME classes include automatic serialization >>> in JSON and XML, generating WADL files to be included in the API docs >>> (work is already happening to make this available for everyone), and >>> consistent input and output types for API endpoints (making it easier >>> for consumers of the API to use it and for implementers to validate >>> inputs and assume consistent defaults). >> >> I can't stand XML. I believe it should be retired to the dustbin of coding >> history, like Basic. > > You've made that clear in the past. :-) I agree, for what it's worth. Some of > our users do seem to want it, and with WSME *you don't have to care*. > >> >> That said, consumers of a RESTful API don't care how the API is implemented. >> They care that it's documented and consistent, and if WSME makes API >> documentation easier, then that's A Good Thing, agreed. >> >> It's true that WSME includes some stuff to make validating inputs "easier", >> but it does so, IMHO, at the expense of readability because everything is >> decorated and hidden away somewhere other than the models themselves. See >> note above... > > I'm not sure what that means. Hidden where? The validation is either > described in the attribute specifier for the model, or in the model's class, > or in the controller (depending on the scope of the rule being applied). > >> >> >>> And, to be clear, Pecan and WSME are integrated by Pecan can definitely >>> be used without WSME. I included WSME in the proposal to replace the >>> home-grown WSGI framework because I thought it added significant >>> benefits, but it is not going to be appropriate for all situations >>> (streaming large image files is one example). >>> >>> * It doesn't need a configuration file, specifically a configuration >>> file that is a Python file as opposed to an .ini file. >>> >>> Pecan does not require a configuration file. It can use one, but we set >>> up the WSGI app factory in ceilometer to not use one and I expect the >>> other projects to work the same way. >> >> OK, that's good to know. >> >> Here's a third reason I don't care for Pecan/WSME: it uses Webob. Other than >> eventlet, I don't know of a single library that OpenStack projects have used >> over the years that we've had more issues with than Webob. > > Yes, I felt the pain of updating us to the latest WebOb. The project has > evolved since those days, and the current maintainers are committed to not > breaking the API. That new attitude, combined with the long history of > addressing edge cases from misbehaving web client libraries makes m e less > reluctant to use WebOb than in the past. > >> >> >>> Tuesday (today) at 2:00 there is a session in the Oslo track >>> (http://icehousedesignsummit.sched.org/event/b2680d411aa7f5d432438a435ac21fee) >>> to discuss tips and pain points with Pecan & WSME. >> >> Unfortunately, I won't be at the summit. :( > > OK, we'll be updating the etherpad and obviously we can continue this via > email. > >> >> >> >I didn't intend to >>> revisit the decision to start adopting either (we've spent an hour at >>> each of the last summits going over that, as well as many email >>> threads), >> >> Yeah, you know the argument that a couple dozen folks have discussed >> something at one or two of the past summits and therefore it should be >> considered settled fact is a bit annoying to me. > > "as well as many email threads". > >> >> Partly it is annoying because the summit has a vast number of sessions, with >> many tracks going simultaneously, making it impossible to get to all the >> sessions that people feel strongly about. I wish I could have been at >> several design summit discussions, especially around database issues, at the >> last couple summits, but I was in the QA track most of the summit, for good >> or bad. > > Yep. There is not a single time slot this week where I don't want to be in > fewer than 3 places at one time. > >> >> Secondly, it is the sign of strength that a contributor community consider >> -- and continually consider -- alternative libraries or implementations of >> various things. Change is good, and projects that are just starting off are >> a good place to experiment with newer libraries and see if something is >> better than what existed previously. I seem to remember that was your >> position on Pecan when the community was considering whether to standardize >> on some WSGI pipeline. Why didn't you just use what was in other projects >> instead of Pecan and WSME? Likely the same reasons that I'm saying "let's >> give Falcon a chance". > > My main arguments were "do not build something new from scratch when there > are working tools" and "the existing library is too hard to use". We can > argue about whether Falcon or Pecan solves the second issue better, but Pecan > was used in production deployments far earlier than Falcon even existed. > >> >> I believe we discussed why Bazaar and Launchpad merge proposals were the >> code contribution platform at length for the Austin, Bexar and Cactus >> summits, with GitHub fans at every one of those discussions, and lo and >> behold, the community switched to Git and GitHub and Gerrit during the >> Diablo timeframe. So, long story short, stuff changes, opinions change, and >> that's totally fine... > > Agreed. > > Doug > >> >> >> > but I do want to clear up any other misconceptions and discuss >>> issues with either tool so that feedback can be incorporated upstream. >>> Now that both Pecan and WSME are on stackforge, we have already had a >>> few patches from OpenStack developers intended to improve and adjust >>> them to meet our needs better. >> >> I think that is a fine thing to continue, and I don't believe this >> particular debate by the Solum project should affect that at all. >> >> Best, >> -jay >> >> [1] >> https://github.com/openstack/ceilometer/blob/master/ceilometer/storage/models.py >> [2] >> https://github.com/openstack/ceilometer/blob/master/ceilometer/api/controllers/v2.py >> >>> Doug >>> >>> >>> >>> I care less about the particular choice and more about >>> consistency. It >>> brings a lot of value, such as making it a lot easier for >>> developers to >>> jump around between the OpenStack projects. Can we first at >>> least agree >>> that there is value in standardizing on *something* for most >>> OpenStack APIs? >>> >>> >>> I completely understand the need for consistency. I pushed my patch >>> as an example of how to do things the Falcon way. While I would >>> prefer Falcon over Pecan (and certainly over Pecan+WSME), I will >>> respect the push towards consistency if that's what is most important. >>> >>> That said, I also believe that the projects in Stackforge should be >>> the "laboratories of experiment", and these projects may serve as a >>> good playground for various implementations of things. I remind the >>> reader that over time, the development community has standardized on >>> various things, only to find a better implementation in an incubated >>> project. Pecan+WSME is actually an example of that experimentation >>> turned accepted standard. >>> >>> >>> Best, >>> -jay >>> >>> >>> I understand that there may be cases where the needs for an API >>> justify >>> being different. Marconi being more of a data-plane API vs >>> control-plane means that performance concerns are much higher, >>> for example. >>> >>> If we agree that consistency is good, does Solum have needs that >>> make it >>> different than the majority of OpenStack APIs? IMO, it does not. >>> >>> Can someone lay out a case for why all OpenStack projects should be >>> using Falcon, if that's what you think Solum should use? >>> >>> Also, is anyone willing to put up the equivalent of Jay's review >>> [3], >>> but with Pecan+WSME, to help facilitate the discussion? >>> >>> [1] >>> >>> http://icehousedesignsummit.__sched.org/event/__b2680d411aa7f5d432438a435ac21f__ee >>> >>> <http://icehousedesignsummit.sched.org/event/b2680d411aa7f5d432438a435ac21fee> >>> [2] >>> >>> http://icehousedesignsummit.__sched.org/event/__4a7316a4f5c6f783e362cbba2644ba__e2 >>> >>> <http://icehousedesignsummit.sched.org/event/4a7316a4f5c6f783e362cbba2644bae2> >>> [3] https://review.openstack.org/#__/c/55040/ >>> <https://review.openstack.org/#/c/55040/> >>> >>> >>> >>> _________________________________________________ >>> OpenStack-dev mailing list >>> OpenStack-dev@lists.openstack.__org >>> <mailto:OpenStack-dev@lists.openstack.org> >>> http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev >>> <http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> OpenStack-dev mailing list >>> OpenStack-dev@lists.openstack.org >>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev >> >> >> _______________________________________________ >> OpenStack-dev mailing list >> OpenStack-dev@lists.openstack.org >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > _______________________________________________ > OpenStack-dev mailing list > OpenStack-dev@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
_______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev