i don't know who invented the REST lecture of my fall 2007 web architecture course did contain the REST triangle, the fall 2008 version will not use it anymore.
but when thinking about how to best explain REST (and coming to the conclusion that the triangle is not useful at all), i thought about possible similarities between REST and natural language. the following thoughts are still pretty rough, but there is something to them that makes me want to explore that direction further.
REST is about having a broad vocabulary of nouns (URIs), these are the resources you can talk about. you make up a URI, and then you can talk about a resource. then there is a much smaller set of representations (content types) which give you the ability to represent something (i.e., to exchange descriptions of resources). by mapping resources to representations, you can use different representations for the same resource (HTML and PDF for a document). finally, there is an even smaller set of verbs, basically the four verbs of HTTP (GET, PUT, POST, DELETE), which let you interact with resources by exchanging representations. depending on what kind of descriptive power you support in your representations, you can interact with resources in different ways.
natural language has few verbs, many more adjectives and adverbs, and can talk about an infinite number of things by using nouns and names. that's the power of language. REST seems very similar to me. why is natural language this way, is this the best (or maybe even only reasonable) way how to have a language that can deal with anything in an open world? are there natural languages that are similar to APIs? to me, REST makes much more sense than the API-centric SOAP world, which hides everything behind interfaces and you can never talk about things, you can only use specifically designed functions for a certain class of things to interact with it.
as i said, these thoughts are pretty rough and i definitely do lack linguistic background here. but it seems to me that comparing REST to natural language could be not only an entertaining, but also a worthwhile exercise. now this might be a bit far-fetched, but i could imagine coming up with thoughts such as REST being the better concept for an open world, whereas SOAP and the WS-* crowd maybe better suited for a closed world where everything is decided by a central entity, and therefore information hiding is good. that's another thing i still have to understand better: i have learned so much about information hiding and encapsulation and all these things from the OO days, and it is still something that is very dominant in my thinking. however, i think when making the move to an open and loosely coupled world and something like REST, these concepts somehow don't work so well anymore. is that because they have been developed for software engineering in closed systems with top-down design as the only method?