As my friend and colleague Anthony Bradley just pointed out in his blog, our WOA note has finally been published (subscription required) and it’s something that I am very proud of. Not just because my co-authors Anthony, Dan Sholler and I produced a well-crafted piece of research (if I do say so myself), but more importantly because we built consensus in support of Web-Oriented Architecture across Gartner over the past several years.
Because of such consensus, the note can put forward Gartner positions such as:
- Interfaces based on WS-* specifications should be constrained by WOA, especially the generic interface constraints.
- More often than not, the WS-* protocol toolkit is unconsciously misused to create needlessly specialized interfaces.
- Application neutrality should be the principal goal of an interface, and implementation neutrality should be a secondary goal.
While I can’t share the entire note with the blogosphere, I can share a couple of highlights — first and foremost the official Gartner definition of Web-Oriented Architecture:
WOA is an architectural substyle of SOA that integrates systems and users via a web of globally linked hypermedia based on the architecture of the Web. This architecture emphasizes generality of interfaces (UIs and APIs) to achieve global network effects through five fundamental generic interface constraints:
- Identification of resources
- Manipulation of resources through representations
- Self-descriptive messages
- Hypermedia as the engine of application state
- Application neutrality
Those of you familiar with Roy T. Fielding’s REST Thesis will no doubt recognize that WOA’s five generic interface constraints are an extension of Roy’s four uniform interface constraints. The one additional constraint, application neutrality, is implicit in the thesis, but we think it is so fundamentally important that we made it a "first class" constraint.
What is application neutrality? Here is a brief excerpt from the 13-page report:
The primary problem with the specifications known as WS-* (such as SOAP, WSDL and UDDI) is that their principal emphasis is on implementation neutrality. All the specifications focus on generalizing away the details of specialized middleware technologies, so that services can be accessed using any one of those technologies. Although this is not an unworthy goal (especially for vendors of specialized middleware technologies), it shifts the focus from the generic interface constraint of application neutrality.
Application neutrality should be the principal goal of an interface, because it is precisely this characteristic that enables shareability (a fundamental SOA principle). In other words, interface designers’ primary goal should be generic, application-neutral interfaces, which generalize away application-specific details.
The key to shared use (reuse) is a generic, application-neutral protocol, such as the Atom Publishing Protocol (APP) or Google’s GData Protocol. Conversely, the more application-specific a protocol is, the less shareable it is. With sufficient generality, the most powerful kind of reuse becomes possible: serendipitous reuse. So important is this kind of reuse that Tim Berners-Lee and Roy T. Fielding have highlighted it an essential characteristic of the Web:
- "Unexpected reuse is the value of the Web" (Tim Berners-Lee)
- "Engineer for serendipity" (Roy T. Fielding)
In terms of Gartner’s hourglass model for identifiers, formats and protocol operations (IFaPs), application neutrality makes the top of the hourglass wider; implementation neutrality makes the bottom wider. A wide top is more important than a wide bottom. In other words, generic application protocols (application neutrality) at the top of the hourglass are more important in creating powerful network effects than portable implementation protocols (implementation neutrality) at the bottom of the hourglass.
The key to generic interface design, WOA-style, is nested generality: gradually specializing generic interfaces in small increments. Whatever level of generalization one begins at — whether it is at the APP-envelope level or the SOAP-envelope level — it is a mistake to embed application-specific schemas and identifiers in either envelope.
Don’t just build on generic interfaces; build up generic interfaces that are only slightly less generic than those built on.
One last point highlighted in the note: let’s not get into a battle over names. If you don’t like the name WOA, call it REST, or ROA, or Web Architecture, or Fred. "The goal is to focus on the key generic interface constraints that unite these concepts, not debate the nuanced differences among them."
We’d love to hear your feedback on this key set of concepts –especially application neutrality — whatever name you choose to call it!