Sunday, November 11, 2007

REST is complex

James Snell: REST is complex.

For the last few years the REST community has been hammering the WS-* world saying that its so complex in the ugly WS-* world and so simple in the REST world. It looks like reality is finally setting in: Its all complex.

I was a bit unfair in picking up only a bit of what James wrote. He did say its all complex ... still, that's quite a change for a REST guy :-).


Unknown said...

I would agree that non-trivial distributed Web applications will require somewhat intricate and even complicated code whether using WS-* or REST. However, I have to disagree with the blanket statement that both approaches are complex. There are degrees and levels of complexity and WS-* would beat RESTful designs hands down when measured with the complexity stick.

With WS-* the complexity rests on having service API and data encoded for service descriptions (WSDL) and for the network protocol (SOAP) that tried to do too much when simple HTTP and examples would do fine. This extra layer of required agreements led to the need of complex tooling to generate service proxies from arcane descriptions. Additionally and importantly, the resulting artifacts in SOAP and WSDL are hard for humans to directly comprehend. This is unlike REST where what you see on HTTP is pretty much what you get, no extra envelope or action or encoding...

The WS-* complexity also lies in how the variety of WS-* were designed by committees that tried to pull the "standard" to their own advantage... Resulting in various overlaps an non-coherent whole, e.g., WS-Policy, WS-Resources, and WS-Transactions. They are stabilizing now but I believe the damage is already done.

The great French artist August Rodin liked to say that he created his masterpieces by taking a piece of marble and removing the unnecessary parts. For me this is a model process to achieve simplicity for software systems. Other folks call it Don't Repeat Yourself (DRY). In a nutshell aim to achieve the required functionality without redundant parts or components. Add to the mix a coherent story and disciplined implementation, you might end up with a simple system... Interestingly, this is also a very Agile approach of doing things.

With RESTful design and related approaches (e.g., data feeds with RSS or Atom or Atom Publishing Protocol), one takes the already scalable, well known, fully compatible protocol named HTTP, and layer on top of it a means for doing the most basic operations on remote resources encoded as plain XML documents or better JSON or other nimbler data encoding approaches. The resulting exposed operations (CRUD) are simple services that are built on HTTP, scale well, and can be used by any remote agents using any programming language, without the need for additional tooling or redundant artifacts.

Anonymous said...

Try out this accommodating drv with the aim of perform a easy reverse mobile phone search with the intention of reverse phone lookup stumble on away commencing home who is behind with the intention of cellular phone number. And you be capable of as well consume this cellular phone number lookup so when to accomplish a phone lookup regarding with the purpose of liar. As well as yet by means of a swap lookup know how to execute the repeal telephone method the greatest thing you be capable of increasingly perform if you suppose a propos it in our day.