OK, thanks for feedback Francesco!

So your concern/frustration was primarily about insufficient testing (and thus 
breaking console) rather than new API design.
I completely agree with you.

Best regards.
Jan


> -----Original Message-----
> From: Francesco Chicchiriccò [mailto:ilgro...@apache.org]
> Sent: Montag, 28. Januar 2013 10:13
> To: dev@syncope.apache.org
> Subject: Re: Discuss: Rest interface for UserRequestService
> 
> On 28/01/2013 09:45, Jan Bernhardt wrote:
> > Hi Francesco,
> >
> >> -----Original Message-----
> >> From: Francesco Chicchiriccò [mailto:ilgro...@apache.org]
> >> Sent: Freitag, 25. Januar 2013 17:08
> >> To: dev@syncope.apache.org
> >> Subject: Re: Discuss: Rest interface for UserRequestService
> >>
> >> On 25/01/2013 16:56, Christian Schneider wrote:
> >>> When doing the CXF version of the UserRequestService I found that
> >>> our current UserRequestController does not really follow the rest ideas.
> >>>
> >>> The problem is that it does follow the idea of doing CRUD operations
> >>> on resources. Some methods work with userId others with requestId.
> >>> So for example the are create, update and delete operations but they
> >>> do not mean the UserRequest but the underlying user.
> >>>
> >>> So I worked out a new interface that purely works on UserRequest and
> >>> only supports POST, READ and DELETE. So basically if you want to
> >>> create or delete or update a user you will POST a UserRequestTO in all
> cases.
> >> cases.
> >>
> >> Problem: you've already made all these changes *without* discussing
> >> this before,
> > IMHO I think it is OK to commit new features without discussing method
> signature in advanced. Most time it is not possible to think of best design in
> advanced, but only while implementing a feature it becomes clear how to
> optimize method signatures. Of course if I change something that effects
> other code also, this should be discusses previously. Do you expect all
> committers to start a discussion before they introduce a new method?
> 
> Of course not, but the whole point was that such change *did* affected
> other code: console's Login page, in this case.
> 
> > Since Core REST interface is an important topic for whole project we
> already agreed to discuss each REST interface one by one. But since new
> REST API will not be used in next syncope release I was expecting that it is
> more important to get a first (nice) implementation done and then start
> discussion and refactoring afterwards. As mentioned earlier, it is not easy to
> make a "perfect" design at first and then start a discussion.
> >
> > WDYT?
> 
> I agree with this: the problem - now fixed, thanks Christian - was that the
> aforementioned refactoring did not consider the side effects on the admin
> console, leaving it completely inaccessible.
> Maybe you don't realize the impact of this, but it was huge.
> 
> I am completely fine with improving API refactory, but I also think that we
> must *all* take care of the side effects of such actions.
> 
> >> once again not taking into any account the domain requirements
> > I don't understand this, can you please elaborate? Domain specific
> requirements are completely mapped. There is no functionality lost by
> making a service RESTful. IMHO I think it is best to preserve all current
> functionality while optimizing request behavior to best practices of used
> technology. Which domain requirement cannot be covered by using proper
> RESTful design?
> 
> I am referring to the match between proper RESTful design (i.e. how to give
> access to a service) and the service itself.
> We can make a wonderful awarded RESTful interface, but if this doesn't
> cover the identity management use cases Syncope is meant to, such
> interface is useless.
> 
> Consider the discussion we've had recently about delete: RESTful best
> practice says "must return void", we need "must return delete entity".
> We ended up with "for anything but users and roles we will adhere
> completely to best practice, for users and roles the functional requirement is
> more weighted than pure best practice".
> This is an example of how I'd think we should match these two aspects.
> 
> >> nor  the compatibility with existing components, but only the technology
> aspects.
> > I also don't understand this. Could you please explain some more? We
> previously agreed, that new REST API does not need to be identically  with
> current REST URLs, only functional compatibility was required. That's why I
> started [1] to document how REST API will change from Spring to CXF
> migration. So people using their own Console client will have to migrate in
> any case. And if this is the case, why not using underlying technology
> according to best practices? This way we will avoid refactoring API at a later
> state, when we run into issues, that could have been avoided by directly
> applying best practices of used technology.
> > Since we are using JAX-B and JAX-RS annotation in new interfaces, writing a
> custom client will become much easier, since client code can be generated
> based on annotations.
> 
> We already agreed on the migration path and [1] contains really nice and
> useful information for this purpose.
> Problems arise when, with purpose of building the new REST interface,
> something breaks the old REST interface - that will stay as official 
> interface for
> upcoming 1.1.0 as well.
> 
> As said above, the broken Login page was the trigger for my e-mail, not the
> proposal for changes to the new UserRequestInterface, not the fact that
> such proposal already modified all methods of the existing
> UserRequestController.
> 
> Regards.
> 
> > [1]
> >
> https://cwiki.apache.org/confluence/display/SYNCOPE/REST+API+upgrade#
> R
> > ESTAPIupgrade-RoleService
> 
> --
> Francesco Chicchiriccò
> 
> ASF Member, Apache Syncope PMC chair, Apache Cocoon PMC Member
> http://people.apache.org/~ilgrosso/

Reply via email to