11/20/07 :: [REST] WADL Metamodel published... [permalink]
I have been talking quite a bit with the REST community lately and our argument came down to challenge one of the core fundamental assumption of REST: resource expose a uniform interface (materialized by the HTTP verbs: GET, PUT, POST, DELETE). I argue that this uniform interface is only possible because a human is making sense of a resource business interface.
There are multiple uniform interfaces possible:
- GET, PUT, POST, DELETE (REST)
- Send, Receive (MEST, WSDL)
- Write, Read (Sockets)
- Create, Read, Update, Delete (RDBMSs)
- Publish, Subscribe (MOM)
They can all implement a business interface on top of any of these so-called "uniform" interfaces, no question about it. The WADL spec clearly shows how to model a business interface over HTTP leveraging REST where you can.
At the end of the day, if you want to model the full interface of say a Purchase order you are going to have something like this:
- PUT (change PO content, you can PUT the content of the PO as often as you want until it is submitted)
- submit (This is a state change not a content change, once you submitted the PO once, you can't submit it "twice", there is no transition from the "submitted" state to itself.
- accept (same thing for accept, what would it mean that you can PUT the content of the PO from here?)
So some RESTifarians like Bill de Hora complain that WSDL force you to think the order in which you invoke your operations. Don't get me wrong I have a lot of respect for Bill, I just can't comprehend that there could such a disconnect between he and I. Am I missing something? At least John and I agree.
What you can easily see in WADL is the amount of code you have to write to manage the URI - method mappings, the handlers and the data binding....
I have attended a SUN event tonight were they presented side by side their Web Service and REST framework, all I could say (and nobody seem to disagree in the attendance) they look a lot alike. So what's the point? REST will inevitably adopt an interface description language, with some luck the grandpas of distributing computing will force an RPC model, will lock down features such as XML extensibility and will forever forbid composition mechanisms such as orchestration, assemblies and choreographies. (Nobody in REST wants to hear about choreography). At the end of the day, the choice is yours, you can use WS-* today at the process and information federation layer (and REST at the presentation layer) or you can wait 5 to 10 years for the REST community to create REST-*.
Good luck with your enterprise implementation of REST :-)