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 Entry

This page contains a single entry by Dave Orchard published on November 29, 2004 8:58 PM.

Broken bathtub hot water tap was the previous entry in this blog.

Versioning Service Data using WSDL Application Data Feature is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories