Its clear that the web itself is based on the client-server principle. Many Web frameworks like JSF, Vaadin etc. implement it like this:
- Provide a abstraction layer to define the HTML + JS + CSS Code to generate (Java Code, Facelets etc.) which in the end is your application
- On request, generate the code sent to the browser, initially create a session model for data binding etc.
- Keep the generated browser client in sync with the backend session
That’s the idea behind the HTML5 buzz. We are now living in the age of web APIs (see https://apihub.readme.io/) and this concept can be applied to web app development very easily.
- You can build new apps around existing APIs very fast, the Tasklist and cockpit are using the same server side implementation
- You can easily write unit tests for the code running in the browser
- Full control over the requests made and the browser compatibility layer
- You make your application scale better because of the stateless backend
- You can develop client and server in parallel and create mockups / prototypes very fast, e.g. to talk about different UI designs
- Browser Compatibility (luckily most frameworks we are using take care themselves)