[squeak-dev] four Altitude questions

Chris Cunnington smalltalktelevision at gmail.com
Sun Dec 16 02:07:26 UTC 2012


On 2012-12-15 1:28 PM, Colin Putney wrote:
>
>
>
> On Sat, Dec 15, 2012 at 10:27 AM, Chris Cunnington 
> <smalltalktelevision at gmail.com <mailto:smalltalktelevision at gmail.com>> 
> wrote:
>
>     Why are the tokens in Altitude urls called RESTful?
>
>
> This is an important and subtle topic. Grappling with it is what drove 
> the development if Altitude, first as a hacked up version of Seaside, 
> and later as a complete rewrite using Xtreams.
>
> I'm hardly an expert on this, but I try to understand REST from the 
> original sources. The term is an abbreviation of "representational 
> state transfer" and refers to an architectural style for distributed 
> applications that was described in Roy Fieldings doctoral 
> dissertation. [1] You'll note that "R. Fielding" first is on the list 
> of authors of RFC 2616 [2], which describes HTTP. With a pedigree like 
> that, it's no surprise that REST is the most important buzzword of the 
> web development world.
>
> For me, the simplest way to think about REST is to imagine an 
> old-school static web site: a directory of files being served by a 
> generic Apache installation, with no fancy plugins, mod_rewrite magic 
> or anything like that. You have a simple convention where the web page 
> corresponding to a directory is found in a file called index.html 
> inside that directory, but otherwise the directory tree in your 
> DOCUMENT_ROOT is mapped directly into the URL space for that server: 
> http://example.com/foo/ will fetch the contents of 
> $DOCUMENT_ROOT/foo/index.html, and http://example/favicon.ico will be 
> found at $DOCUMENT_ROOT/favicon.ico.
>
> There are a couple of important properties of a setup like this:
>
> 1. There's a single entry point with a well-known URL: 
> http://example.com/. The client begins by downloading that page, and 
> from there it discovers other urls where related resources can be 
> found---css, images, javascript etc. There might also be hyperlinks to 
> other pages, which the user might click on to navigate to other pages. 
> The important bit is that all URLs are provided by the server. At no 
> point does the client generate a url by following a convention. (ie, 
> something like "the resource I want is of type Person, and has ID #3, 
> and I want the HTML page that describes that person, so the url will 
> be /people/3.html"). The urls may in fact follow such a convention, 
> but that's solely for the convenience of the server, and the client 
> always receives URLs explicitly, though they might be in relative 
> rather than absolute form.
>
> 2. The client-server transactions are stateless. Each request is 
> independent, and the server doesn't interpret requests in a 
> client-specific context. As a consequence, the the URLs that link one 
> document to another are the same for all clients.
> Now, consider Seaside;
>
> 1. A Seaside application follows the same pattern, with a well-known 
> entry point, and all URLs provided by the server.
>
> 2. However, a seaside application don't have stateless transactions. 
> Each url generated by Seaside contains a session identifier and a 
> continuation identifier, which refer to client-specific context stored 
> on the server. Thus each client's view of a particular page is unique. 
> Each page is located at a client-specific URL and has links to other 
> pages at client-specific URLs. This is why Seaside is not RESTful. 
> (For example, open up http://www.squeaksource.com/. Now open the same 
> URL in another tab. The two tabs will have different urls in their 
> location fields. Now mouse-over the link to the "Projects" page. Each 
> tab will have a different URL for that link.)
>
> Now, the reason Seaside is such a good framework is that it provides 
> an abstraction that hides all the details of the way that state is 
> threaded through the client-server transactions in a web app. It 
> generates urls, form field names, session ids etc so that application 
> developers don't have to concern themselves with the details of 
> marshalling and unmarshalling the state of their application into 
> strings on each request.
>
> Altitude tries to provide that same level of abstraction in a RESTful 
> way. That is, it behaves like an old-school static web site with 
> respect to property #2: it produces consistent urls for the "same" 
> resources, and doesn't store client-specific context on the server.
>
>     Andreas Raab criticized Seaside because SqueakSource cannot be
>     indexed by Google. The Altitude url tokens look extremely similar
>     to Seaside's.
>
>     1. If they are different, how?
>
>
> Yes. They are superficially similar, in that they are opaque strings 
> generated by the server. But if you go to http://box3.squeak.org:8624/ 
> and do the same experiment as I described above with regard to 
> SqueakSource, you'll see that the URLs are opaque, but consistent. The 
> home page is always at /, the community page is always at 
> /yqKyLzH7r9ePyzIWOLUBWO9x, for all clients.
>
>     2. Can an Altitude application be indexed by Google? If so, which
>     subclass of ALUrlStrategy would be employed?
>
>
> Yes. Imagine that Google crawls the new site you've created for 
> Squeak. It will index /yqKyLzH7r9ePyzIWOLUBWO9x and then when somebody 
> does a search for "Squeak community" that page will come up (we hope). 
> The user clicks on the link, and arrives at /yqKyLzH7r9ePyzIWOLUBWO9x, 
> and sees the community page. Great! If that were a Seaside web site, 
> the user would get a 404 error, because the page that Google saw has 
> expired from the server.
>
> Any strategy could be used, and the site would still be indexable. The 
> strategies have differences which might make one strategy or another 
> desirable for different purposes, but RESTfulness isn't a property of 
> the structure of the URL so much as the way the server handles them. 
> That's why the locator is named Restful, not the strategies.
>
> Does this make sense?
>
Yup. I just pulled out my copy of RESTful Web Services (O'Reilly, 2007) 
and reviewed the stuff I highlighted four years ago. I get it. I 
understand why you serialize and hash things. I see Etags in the bigger 
picture. To review this stuff is to be pulled back into a large topic. 
It would seem that Altitude is an extremely RESTful framework. That 
opens a door for Smalltalk to participate in a larger world.

Chris

> Colin
>
>
> [1] https://www.ics.uci.edu/~fielding/pubs/dissertation/top 
> <https://www.ics.uci.edu/%7Efielding/pubs/dissertation/top>
> [2] http://tools.ietf.org/html/rfc2616
> [3] Well, actually it does, but only for purposes of ranking, not 
> indexing.
>
>
>


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20121215/9c6a9982/attachment.htm


More information about the Squeak-dev mailing list