« Broken bathtub hot water tap | Main | Versioning Service Data using WSDL Application Data Feature »

The hide the "implementation details" myth

Over the past few weeks on WS-Addressing land, people have regularly argued that various features should be in scope or out of scope based upon what they call implementation details. I think there is a fatal flaw in trying to abstract away from "implementation details". In fact, I think the Web's fundamental architecture is designed for implementation details.

During my career, I have regularly tried to abstract/encapsulate/layer software. Sometimes it's worked amazingly well, but even in the best case, it's never ever been 100%. I've come to the conclusion that all abstractions are leaky. It's just a question of when/where they leak. This leakage can sometimes fall under the category of implementation details.

The Web is a great example of where implementation details have controlled and even determined the protocol. There are a couple of incredibly important underpinnings of the Web that were designed for implementation details. The use of a uniform interface, mostly through the GET method, and self-describing data (by having the media type in an HTTP header) are absolutely essential for implementation of intermediaries, like firewalls and caches. If the uniform interface wasn't, well, uniform, it would make building a cache much harder. And if the data was not self-describing, say the media type didn't even exist, it would make it almost impossible to determine whether the cache had the right type of resource of the URI. The use of a uniform interface + self-describing data provides the property that the REST thesis calls "visibility". It is this property that enables intermediary implementations.

How about them "implementation detail" apples?

About

This page contains a single entry from the blog posted on November 29, 2004 8:58 PM.

The previous post in this blog was Broken bathtub hot water tap.

The next post in this blog is Versioning Service Data using WSDL Application Data Feature.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.34