Monday, 24 March 2008
What is Software Architecture?
« ROA vs SOA: The Uniform Interface | Main | Tilkov on Doubts About REST »Technorati Tags: architecture rest roa soa
[Trackback URL for this entry]
Stu: thanks for the thoughtful response.
You said: "Sure, it is easy to imply that theory is useless in practice and downplay academia. But, I would think the more appropriate response would be to understand what the academics have come up with, and THEN explain why their theory is incomplete or wrong, rather than doing so out of confusion." I think this is a pretty good summary of what I'm attempting to do with this series of blogs, except that I'm trying to communicate to other people in industry who are trying to solve the problems within their enterprises.
Regarding REST vs SOAP outside the firewall, I pretty much agree. I've said several times that REST seems to solve problems well where communities converge to create rich standards and tooling around those standards. Atom is a perfect example.
Finally, I *DO* understand the "architectural style" terminology. I just don't find it that useful and think I summed up why best with my question: "Isn't the real problem here that we named the abstraction without having a few concrete architectures to justify it?". The difference between the GoF patterns and REST is that the "factory" or "decorator" patterns describe things whose existence is plentiful. These abstractions name the common elements of concrete instances that occur often. The problem with creating the abstractions first is that they may not describe the reality practitioners need described.
Regarding LDAP - LDAP could be used for a lot more besides its mainstay of security data organization, but isn't for exactly the reason of not having good metadata. RDBMS are often used in places where hierarchical read-mostly data should make LDAP a good technical choice. This is because DDL and data dictionaries make databases much easier to work with. In other words because of data format contracts.
Finally, regarding SOAP in the enterprise: WS-I has improved interoperability greatly. The days of needing a uniform stack are behind us. Maybe that was true 6 years ago, but it's certainly not true now.
Contracts are not just about code generation. They are a technical artifact of design that support gap analysis, change detection and communication, and, as you note, testing and QA. Without contracts, you lack all of this. I can't really mock out an interface unless it declares what its contract is.
Hi,
I'd like to continue this more , and I'll keep coming back from time to time, time permitting.
For now...
The difference between the GoF patterns and REST is that the "factory" or "decorator" patterns describe things whose existence is plentiful.
I've never once seen a "factory" or "decorator" that fits *exactly* what GoF's examples said, but it fit them "more or less".
Similarly with the Web -- it fits REST *more or less*. And, the web's existence is plentiful.
This is the need for architectural styles -- we can't have a reasonable conversation about the pros & cons of the Web's architecture vs. a general purpose Client/Server or Event-Based architecture like Web Services without devolving into nit-picking over specifics, or a debate about the utility of these abstractions. It's meta-arguing.
WS-I has improved interoperability greatly. The days of needing a uniform stack are behind us. Maybe that was true 6 years ago, but it's certainly not true now.
Really? How is WS-I Attachments Profile treating you?
I worked at a major WS-I vendor for almost 4 years, and:
a) the vast majority of customers do not run in WS-I mode, as it often disables features that they want from the leading edge,
b) integration with anything beyond plain SOAP 1.1 is often a low-level, socket sniffing affair, especially when dealing with XML DSig and Encryption, WS-Security (particularly with digests), SAML, or SPNEGO/Kerberos. Many places revert to HTTP/S for this reason.
c) Not everyone supports all XSD constructs, so if you take a "contract first" approach to XSD, you need to be very careful to understand the data binding toolkits being used, restricting, in practice, the use of XML into an "in-order, non-extensible markup languge".
For example, substitution groups are poorly supported everywhere. The XSD Unique Particle Attribution rule makes planned extensibility almost Kafkaesque.
WS-I was considering profiling XSD for this reason. Egads! Wouldn't you think a data system is the foundation on which all rests, and we can't even *use* half the features of it? I realize the new XSD 2 work will fix some of this.
c) when you get that far, great, but it's just as coupled as CORBA was -- what was the benefit again?
So, my point of why architectural styles are necessary, and needed, is that there's something that very clearly is used often in practice -- The Web -- and many enterprise architects can't see the utility of its style, or recognize it as something worthy of imitation.
It's not the only style, by any means, and won't be -- but it has many of the properties that people claim they want when they ask for "agility".
Hi Stu... I welcome ongoing conversations.
Regarding WS-I Attachments, I should be more specific: I'm talking about the WS-I Basic Profile. I don't think highly of file attachments of any kind. Interchange formats for data should be XML, not some opaque binary blob. If you need binaries, use a content management system.
To your points:
a) That many people don't currently use WS-I compliant web services means 1) it's relatively new 2) platform independence doesn't matter as much as people claim. When interoperability matters to you, you can use get it via WS-I.
b) I'm not defending the sprawl of WS-*. SOAP over HTTPS is just fine for most things. As time goes on a few standards out of WS-* will win and most will die. That's the sign of a HEALTHY technological community.
c) XML Schema is sometimes too heavy of a solution for some problems. But these scenarios are overstated, and this is a problem with XML, not with SOAP. Limitations with XSD affect RESTful web services that use it too. If XSD is a problem, the solution is to use well supported features.
I certainly agree architectural patterns serve a purpose, but I don't agree that we should start defining particular patterns until there are lots of implementations that exhibit it in fundamentally different ways. Patterns should FOLLOW practice.

I think this rings pretty true to me regarding architecture. I agree with the idea that it defines a set of principles that allows you to make design decisions. One axis is consistent/inconsistent (maybe more polite than good/bad :).
Another axis I find equally important is hard/easy. Architectures make choices (hopefully explicitly) about what kinds of changes are hard or easy.
Certainly, different styles of SOA/web services/REST make tradeoffs on how messages and operations can evolve and that's an important thing to understand.