REST-*: Blessing or Bane?

Recently, JBoss has announced a new architecture initiative called
REST-*. The purpose of this initiative is to create an open source
project dedicated to the goal of applying web architecture to
integration and middleware. They intend to take traditional integration
concepts and find which ones fit into the
REST model.
The hope is to publish the specifications that will be created from this
project as
IETF
RFCs.

From the website, the stated architecture goals are:

  • Low barrier to entry - Clients that use the specification should
    have a very low barrier to entry. They shouldn’t need to install a
    library or large stack of software to use a specification. An HTTP
    client or web server provided by the language or platform should be
    enough to implement or use implementations of the specification.
  • Edge Cases should be Extensions- Edge cases that complicate the
    main specification should be defined in a separate
    sub-specification. Extensions should strive to be layered on top of
    the main specification by using facilities like HATEOAS and HTTP
    conneg to provided their features.
  • Pragmatic REST - While a specification should strive to follow
    RESTful principles, simplicity should never take a back seat to
    being a pure RESTafarian. If you need to bend the rules of REST to
    create a simpler design, then that’s the path that should be taken.
  • 80/20 Rule - Specifications should remain simple. Many times in
    specification efforts, edge cases cause a lot of bloat and
    complexity within the specificaiton making it difficult to use,
    understand, and implement. Specifications should cover 80% of the
    most common use cases. Edge cases should not be in the main
    specifications. REST should be able to provide the facilities
    (HATEOAS, HTTP conneg) to abstract away edge cases.
  • Avoid Envelope formats- Whenever possible, avoid envelope
    formats. Examples of envelope formats are SOAP and Atom. Envelope
    formats encourage tunneling over HTTP instead of leveraging HTTP.
    They also require additional complexities on both the client and the
    server. In most cases HTTP headers should be enough to transfer
    metadata about the request, response, or resource.
  • Isolate data formats to extensions- If possible, specifications
    should try not to define new data formats.

I will be following the developments of this project very closely since
this is an area where I am dabbling a bit myself. I am very interested
in seeing how they approach some of the issues I have blogged about
recently. My only concern is that they will attempt to build
specifications around some of the worst ideas in distributed computing.
That is my primary complaint with the way the WS-* specifications have
evolved. Back when the “S” in SOAP still stood for “Simple”, SOAP seemed
like a promising way to build distributed systems based on open
standards. Unfortunately, the specification committee promptly took the
opportunity to add everything including the kitchen sink. In the process
they made it nearly impossible to build anything with SOAP-based
services and wrecked the promise of interoperability between different
vendor implementations. I just hope the REST-* project does not repeat
the same mistakes. (Distributed transactions and reliable messaging. I
am looking at you.)