If I look around there are very few
RESTful GUI webapplications. Is this
because of historical reasons or is a
RESTful design unproductive in common
scenarios?
My answer is subjective, but in my opinion, two major hurdles hinder RESTful development:
- Change - it very different from the way sites are traditionally designed
- Challenge - designing a pure RESTful server API and a corresponding rich, robust client UI isn't easy
Complex GUIs will require a JavaScript
application on the client in many
cases.
In my opinion, a complex, a rich client-side experience is going to require some in-depth JavaScript, regardless of the server-side implementation.
You have to stay on the same page and
reload only parts,
This is a very different design from the traditional request/response full-page-to-full-page design. Each design has its own trade offs. REST designs work particularly well with AJAX calls, but the client-side code requires careful design to be maintainable and robust.
A RESTful server with a thick-client:
- scales well: session information for every user isn't stored in scarce server memory
- less request/response data over the wire: not sending every page in full, not sending session IDs or
ViewState
s
- clean reusable URLs: provide a clean, decoupled server API that can support multiple UIs
- pure: strict adherence to the HTTP specification (GETs cause no side effects, etc.)
- client experience: richer, more responsive with asynchronous transactions
However, as you mentioned thick-clients have drawbacks:
- more vulnerable to XSS attacks, RESTful URLs really need careful security
- complex JavaScript can be challenging to develop, maintain, and debug (using OO JavaScript can help mediate this)
- there is a need to indicate to the user that asynchronous requests are processing in the background
- more client-side failure-handling logic is required
- frameworks and IDE tools have been traditionally weaker for client-side development, compared to server-side (this is slowly getting better)