REST and the Real World
by Paul Prescod
February 20, 2002
In the last article I described
a new model for web services construction. It is called Representational State
Transfer (REST), and it applies the principles of the Web to
transaction-oriented services, rather than publishing-oriented sites. When we
apply the strategy in the real world, we do so using web technologies such as
URIs, HTTP, and XML. Unlike the current generation of web services
technologies, however, we make those three technologies central rather than
peripheral -- we rethink our web service interface in terms of URIs, HTTP, and XML. It is
this rethinking that takes our web services beyond the capabilities of the
first generation technologies based on Remote Procedure Call APIs like
SOAP-RPC.
In this article I discuss the applicability to REST of several industry
buzzwords such as reliability, orchestration, security, asynchrony, and
auditing. Intuitively, it seems that the Web technologies are not
sophisticated enough to handle the requirements for large-scale
inter-business commerce. Those who think of HTTP as a simple, unidirectional
GET and POST protocol will be especially surprised to learn how sophisticated
it can be.
Quick Review
REST is a model for distributed computing. It is the one used by the
world's biggest distributed computing application, the Web. When applied to
web services technologies, it usually depends on a trio of technologies
designed to be extremely extensible: XML, URIs, and HTTP. XML's extensibility
should be obvious to most, but the other two may not be.
URIs are also extensible: there are an infinite number of possible URIs.
More importantly, they can apply to an infinite number of logical entities
called "resources." URIs are just the names and addresses of resources. Some
REST advocates call the process of bringing your applications into this model
"resource modeling." This process is not yet as formal as object oriented
modeling or entity-relation modeling, but it is related.
The strength and flexibility of REST comes from the pervasive use of URIs.
This point cannot be over-emphasized. When the Web was invented it had three
components: HTML, which was about the worst markup language of its day (other
than being simple); HTTP, which was the most primitive protocol of its day
(other than being simple), and URIs (then called URLs), which were the only
generalized, universal naming and addressing mechanism in use on the
Internet. Why did the Web succeed? Not because of HTML and not because of
HTTP. Those standards were merely shells for URIs.
HTTP's extensibility stems primarily from the ability to distribute any
payload with headers, using predefined or (occasionally) new methods. What
makes HTTP really special among all protocols, however, is its built-in
support for URIs and resources. URIs are the defining characteristic of the
Web: the mojo that makes it work and scale. HTTP as a protocol keeps them
front and center by defining all methods as operations on URI-addressed
resources.
Auditing and Securing REST Web Services

Does REST make sense for you? Share your views in our forum.
Post
your comments
The most decisive difference between web services and previous distributed
computing problems is that web services must be designed to work across
organizational boundaries. Of course, this is also one of the defining
characteristics of the Web. This constraint has serious implications with
respect to security, auditing, and performance.
REST first benefits security in a sort of sociological manner. Where RPC
protocols try as hard as possible to make the network look as if it is not
there, REST requires you to design a network interface in terms of URIs and
resources (increasingly XML resources). REST says: "network programming is
different than desktop programming -- deal with it!" Whereas RPC interfaces
encourage you to view incoming messages as method parameters to be passed
directly and automatically to programs, REST requires a certain disconnect
between the interface (which is REST-oriented) and the implementation (which
is usually object-oriented).
In the previous article I discussed how it is possible to use Access
Control Lists (ACLs) to secure services which use URIs as their
organizational model. It is much harder to secure an RPC-based system where
the addressing model is proprietary and expressed in arbitrary parameters,
rather than being group together in a single URI.
With URI-based (REST) web services, administrators can apply ACLs to the
service itself and to every document that passes through the service, because
each of them would have a URI. As two business partners work their way
through a process, each step could be represented by a new document with an
attached ACL. Other partners (or auditors) could be given access to this
document later merely by manipulating the ACLs.
In the REST model, both business partners would have a shared view of the
URI-space representing the process. Rather than sending each other business
documents through an email-style pipe, they would PUT them on each other's
web sites with shared URIs and passwords. These could be easily checked for
discrepancies. Third parties can be brought into the process (perhaps for
auditing) merely by pointing them at one or both of the URIs. Standard HTTPS
and HTTP authentication and authorization would be sufficient to keep
intruders from also being able to look at the documents.
Of course, HTTP-based Web Services can go through firewalls easily, but
that is the only point of similarity with RPC tunneling through HTTP such as
XML-RPC or SOAP-RPC over HTTP. When you use HTTP over a firewall, you are
being very explicit about what is going on. Your system administrator can
look at the logs to determine what services are running and who is accessing
them. She can disable PUT or POST to make certain parts of the service
read-only. She can use standard filtering and hacker detection tools. When
you use HTTP as HTTP, you and
the system administrator are on the same team.
Conversely, when you
tunnel XML-RPC or SOAP on top of HTTP, just to get through a firewall,
you are deliberately subverting her work and reducing the efficacy of her
tools. Because you are hiding your real actions in the XML body, you make it
much harder for her to use standard filtering tools. This greatly expands the
opportunity for new security holes. Famed security expert Bruce Schneier has
spoken out
against SOAP over HTTP for exactly this reason.