Search the web
Sign In
New User? Sign Up
rest-discuss · REST Discussion Mailing List
? Already a member? Sign in to Yahoo!

Yahoo! Groups Tips

Did you know...
Real people. Real stories. See how Yahoo! Groups impacts members worldwide.

Best of Y! Groups

   Check them out and nominate your group.
Having problems with message search? Fill out this form to ensure your group is one of the first to be migrated to the new message search system.

Messages

  Messages Help
Advanced
Dynamic Evolvability   Message List  
Reply | Forward Message #7195 of 14029 |
Re: [rest-discuss] Dynamic Evolvability

On Dec 4, 2006, at 2:57 PM, Jan Algermissen wrote:
> Roy writes in his dissertation:
>
> "2.3.4.1 Evolvability
>
> Evolvability represents the degree to which a component
> implementation can be changed without negatively impacting other
> components. Static evolution of components generally depends on how
> well the architectural abstraction is enforced by the implementation,
> and thus is not something unique to any particular architectural
> style. Dynamic evolution, however, can be influenced by the style if
> it includes constraints on the maintenance and location of
> application state. The same techniques used to recover from partial
> failure conditions in a distributed system [133] can be used to
> support dynamic evolution."[1]
>
> While trying to flesh out the argument that REST does increase
> dynamic evolvability (and that SOA (whatever it really is) does not,
> if so) I realized that I am not entirely clear what architectral
> constraint of REST increases dynamic evolvability and why it does so.

I am "pretty sure" that I was thinking of the constraint that
application
state be kept on the user agent. It is dynamic evolution in the
sense that
an old origin server can be replaced with a new one in the middle of one
browser's ongoing conversation with a website (aside from the current
message streams, which are presumed to complete before the origin server
is replaced). Likewise, servers don't need to remember clients, so
replacing
a piece of client software does not affect other clients or servers.
Use of URIs also helps in that regard (as opposed to using something
that is less portable during evolution, like UUIDs).

It is difficult for me to remember the exact origin of what I was
thinking
at the time because architectural properties were the first parts of the
dissertation written down (part of the survey paper) and I changed the
categories around several times. Most software research calls them
"qualities" (mostly because that is what Boehm called them in early
studies, IIRC), though some other sources refer to them as principles,
requirements, or a host of other disturbing things.

My first thought today was that I must have picked that definition up
from some conversation with my apartment-mate (Peyman Oreizy). His
dissertation on decentralized software evolution can be found at

http://www.ics.uci.edu/~peymano/

but he seems to have settled on a different set of terms from the
ones that I used. It is worth reading anyway if you are interested
in software evolution (or adaptability).

> The reference to Waldo's "Note on Disributed Computing" suggests -if
> I understand correctly- that one of the problems of dynamic evolution
> is to leave the calling component in a consistent state if the
> interface of the called component unexpectedly changes. IOW, making a
> call to a remote object should either succeed or fail with a clear
> error indication that tells the caller that the interface changed and
> how.

Er, possible, but more likely I was just thinking of partial failure
conditions being the result of evolution-in-situ.

> Regarding REST I understand this:
>
> While REST's uniform interface constraint cannot prevent a remote
> component from changing its interface as part of an evolution (e.g.
> it could remove former support for PUT) the client will know exactly
> what happened since it knows the method semantics (they are uniform)
> and the error code ("405 Method Not Allowed") indicates the reason
> for the failure. IOW, dynamic evolvability is increased because the
> called component can change without brealing the client (because the
> client is required to understand and expect a 405).
>
> Is this understanding correct?

I think it is more accurate to say that a resource cannot change
its interface as part of an evolution because all resources have
the same interface. (405 doesn't change the interface -- it is an
answer to the request via the same interface.) But REST does not
require use of a single interface protocol, so in that sense the
interface could change dynamically (e.g., HTTP Upgrade).

> Assuming it is correct, does WS-* (being a SOA implementation) pass
> the test or not?
> (Without interface uniformity, all the server can really tell the
> client upon an interface change is: "Interface changed". This IMHO
> violates the constraint that the client must be in a consistent state
> after the failed call).

WS-* doesn't *do* anything, and thus doesn't qualify for any test.
You would have to test an application architecture that happens to
use WS-* in a specific way that is testable. HTTP doesn't
"pass" the test in isolation either -- it only passes when a
REST-based application makes use of HTTP in a RESTful way.

> Can anyone explain to me, how the location of application state
> affects dynamic evolvability? I am honsetly missing a clue here (or
> do not see the forrest for the trees).

Consider what happens when a stateful server is replaced in the
middle of a conversation with a client by a new server which seems
just like the old one but has no idea what stage the client is
within its application.

....Roy



Tue Dec 5, 2006 1:26 am

roy_fielding
Offline Offline
Send Email Send Email

Forward
Message #7195 of 14029 |
Expand Messages Author Sort by Date

Hi, Roy writes in his dissertation: "2.3.4.1 Evolvability Evolvability represents the degree to which a component implementation can be changed without...
Jan Algermissen
algermissen1971
Offline Send Email
Dec 4, 2006
11:02 pm

... I am "pretty sure" that I was thinking of the constraint that application state be kept on the user agent. It is dynamic evolution in the sense that an...
Roy T. Fielding
roy_fielding
Offline Send Email
Dec 5, 2006
1:34 am

Roy asks about a stateful server evolving when the new server has no idea what stage the client is at. This is a great question, but most stateful servers...
Dave Orchard
dorchard100
Offline Send Email
Dec 5, 2006
5:42 am

... Er, sometimes they do, yes, and other times they are just a checkbox on a marketing pamphlet. I have yet to see an instance of one vendor's server be...
Roy T. Fielding
roy_fielding
Offline Send Email
Dec 5, 2006
9:07 am

Roy, thanks a lot, that was very helpful. ... Ok. Would it then be reasonable to say that a style that constrains the interface (to be uniform) increases...
Jan Algermissen
algermissen1971
Offline Send Email
Dec 5, 2006
8:09 pm

Correction: Sorry, my use of the term 'data element' below is imprecise. I was refering to representations only, not the other data elements of REST (headers,...
Jan Algermissen
algermissen1971
Offline Send Email
Dec 5, 2006
8:53 pm
Advanced

Copyright © 2009 Yahoo! Inc. All rights reserved.
Privacy Policy - Terms of Service - Guidelines - Help