March 27th, 2017
(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: firstname.lastname@example.org
The problem with operations is that we have to define, a-priori, the semantics of each individual operation. We cannot tell, unless we know beforehand, whether the operation is safe to call multiple times, whether the result of an operation will be the same every time we call it, whether the result can be cached, and if so for how long. Many years of building distributed applications have told us that these questions are critical for scaleability. The insight of Roy Fielding was to reduce the types of operation that could be performed on the web to a minimal set with universally established semantics.
The web is a huge, surviving, growing proof that the architecture on which it is built is sound and scales. These principles are not academic but at the very core of how the web works today: reverse proxies, caches, CDNs all contribute to make the user experience of the web what it is today.
One of the many problems with the Web is that I’ve seen unreliable implementations of all of these things. Indeed, unreliable is the default.
The world would be a better place if we got rid of the Web and replaced it with a protocol where each individual object was tagged with keys that told us if:
* the operation is safe to call multiple times
* the result of an operation will be the same every time we call it
* the result can be cached, and if so for how longSource