And now for something completely different …
I thought it might help my cause for me to admit that I’m only
human (yes, I’m not really a know-it-all!), and that there remain
things about REST and Web architecture
that I don’t understand (including those things that I don’t even
understand that I don’t understand 8-). Here’s my current list of
things I know I don’t grok.
Can I do PUT with POST RESTfully? I go back and forth on
this one all the time. At first glance, the answer seems to be yes;
that it should be possible to “submit data” with POST semantics, but
using a mandatory extension (ok, so it’s
M-POST) to
indicate the extended intention of “state replacement”. But when you
dig a bit deeper, you wonder if this is equivalent to tunneling;
that the extended intention of PUT-via-POST provides visibility into
the terminal state of the resource, which seems to be a no-no from a
REST POV. I won’t even bother you with the wacked mental model I
have of this issue, except to say that it involves
residues.
Self-description and namespace mixing If I produce a
multi-namespace document, am I automatically importing the
entailments of
those namespaces? Dan Connolly says
yes (at least for RDF Schema), and I disagree with him. But I lack
the background in this space to be able to convince Dan (or even
myself, for that matter). It’s just a hunch at this point, but the
issue has very important consequences, especially to REST which requires
self-descriptive messages.
A proposal of mine
was recently
accepted by the
RDF Core WG
which IMO, will help explain what RDF is for to a lot of people who
don’t yet understand the important role it plays in the World Wide Web
project. I believe this because I’ve used the RDF it permits, to
successfully explain what RDF adds over vanilla XML to Exec types.
Consider the following. Is it XML or RDF?
<Person xmlns="http://example.org/foofoo/">
<name>Mark Smith</name>
<age>55</age>
</Person>
Answer? It’s both. Depending upon which media type it’s described
with, it means different things.
To an XML application that isn’t hardcoded to know about that language,
it’s an almost entirely opaque blob, except for the namespace.
To an RDF/XML application that isn’t hardcoded to know about that language,
it knows what the XML app knows, plus;
- that there exists a resource of type “http://example.org/foofoo/Person”
someplace, with properties “http://example.org/foofoo/name” and
“http://example.org/foofoo/age” with those values
- that additional properties can be added without impacting the meaning
of the former interpretation, i.e. potentially breaking some application
somewhere. An XML app can’t assume this; it might be breaking its validity
against some schema someplace
- various other possible syntactic additions or modifications which can be
used to extend the current semantics in a backwards compatible way, if desired.
This is the value of partial understanding.
I’m sure everybody’s seen the
Amazon/Microsoft announcement
about buying books through Powerpoint by now. Did you notice this bit?
The solution, called Amazon.com Research Services for Microsoft Office System, will be available for download in the Office Marketplace at no additional charge later this fall.
Oh goody, so now I’ve got to download a new app every time
somebody integrates their services with Microsoft’s?
If you can’t do
O(N) or better,
go home.
Here’s an interesting project, Sensor Web;
Sensor Web is a web-centric, open, interconnected, intelligent and dynamic network of sensors. It presents an entirely new vision towards the way we deploy our sensors, the way we collect the data, the way we fuse and distribute the information.
Alright, I thought, some Web fans who aren’t afraid of tackling the big
integration problems. Upon further investigation however, I discover (in a
report titled
“An Web-based Distributed Geocomputing Architecture for Smart Sensor Webs” no less)
that they’re not using Web architecture, they’re using Web services. Hey, if
they want to knock themselves out trying to tackle that problem given the
known integration problems with Web services, that’s fine. But doing it
while saying it’s “Web-based”, is misleading and harmful, especially to those
who might use the Web to solve the same problems.
Mark Nottingham
responds
to my suggestion that “REST = SOA + late binding”;
[…] While I see the truth in this, I think it’s pretty orthogonal, and it’s not that compelling for most SOAish folks.
This is because their use cases are machines talking to machines, not people talking to machines. In Web browsing, this is great, because people are smart enough to look at the late-bound semantics in a representation and figure out what they want to do; machines aren’t, yet.
Hmm, I think we might not be in synch about “late binding”. Without
getting into the nitty gritty of it, which I admit eludes me sometimes,
perhaps we can just look at the use Roy makes of the term;
This abstract definition of a resource enables key features of the Web architecture. […] it allows late binding of the reference to a representation, enabling content negotiation to take place based on characteristics of the request.
“Late binding of the reference to a representation” refers to GET; that any
reference can be turned into data without dependencies on any centralized
component. As a comparison between the SOA and REST approach, consider an
identifier for a purchase order; REST would use a URI, “http://example.org/po/928340823”,
whereas an SOA approach might use just “928340823”. Turning the former identifier into
data, no matter where its discovered, requires simply invoking GET on it. Turning the
latter into data cannot be done without a dependency on some central component
that turns purchase order identifiers into data. This is why Web services
need centralized registries like UDDI.
Hopefully this sheds some additional light on what “REST = SOA + late binding”
means. Another interpretation could be “REST = decentralized SOA”.
In a
report on Web services tools,
PC Magazine‘s Robert P. Lipschutz writes;
Data-based strategies such as Roy Fielding’s REST (REpresentation State Transfer) replace SOAP and put the content, Uniform Resource Identifiers (URIs), and XML at the center of the equation. It’s too early to make the call on REST, but don’t rule this option out.
Doug, anticipating my response,
promptly responds.
He brings up the “identification vs. location” issue, which I agree
remains a point of contention between many (though the Web wizards
are all in agreement on this one, at least 8-). But we’ve
already been there,
and I don’t think I could explain my position much better than I did there. So
I’ll concede that point for the moment so we can move on to an aspect of
architecture which I feel is more important in determining the degree of
loose coupling; late binding.
REST uses late binding, as REST clients are developed to a system-wide
abstraction; the resource. As an example of what this enables, a RESTful client
can get data from any RESTful server. SOA cannot do this; a constrained
interface is required for this, whether in a RESTful manner or not.
FWIW, in these terms, one can look at REST as the natural evolution
of SOAs on the Internet; SOA + late binding => REST
Another excellent piece
by Adam, this time on disconnected operation. He writes;
This model is profoundly different than the normal browser.
Well, different, but not “profoundly” different. But keep in mind that REST
is more than just what is seen through a browser. It’s simply data transfer.
What he describes there is an architecture which sounds an awful lot like
REST and “REST + additional constraints” to me, where the additional constraints
would include things like resources are queues.
Obviously not all resources would be queues in the system Adam describes, which is why
you’d need two styles; vanilla REST, as well as REST with the queue constraint.
Doug Kaye writes,
in reference to a list which places REST before SOA;
It also tracks the scales of tight-to-loose coupling and the availability of supporting technologies.
(suggesting that SOA is more loosely coupled than REST)
I don’t have much of a feel about how loosely coupled “Orchestration” is, but
I do know that REST based services are more loosely coupled than SOAs. Whether
or not you believe that REST can be used for machine-to-machine communications,
I think it’s pretty clear that REST uses late binding, while SOAs do not, since
REST constrains the interface. Amoungst other things, this means that any agent
can exchange data with any service, past, present, or future. You can’t do that
with SOA, because you don’t know the interface that future services might use to
exchange data.
An interesting question would be, what would a late bound version of an SOA
look like? And wouldn’t this be worth pursuing?