If you are *serious* about making sure your application architecture matches your problem domain and delivers all the properties (scalability, reliability, adpatability, etc.) that you require, I think you should read Chapters 2[1] an 4[2] of Fielding's dissertation and SKIP CHAPTER FIVE.
Chap 2 lays out the process of selecting desired PROPERTIES of your system.
Chap 4 acknowledges the REQUIREMENTS of a sytem
Chap 5 is just one example of how to apply CONSTRAINTS to induce the PROPERTIES while honoring the REQUIREMENTS.
Ch05 (REST) just an example, not an end goal.
As Chris pointed out, you can achieve your goals in many ways. some take more hardware, some take more software, some rely on async, some require all comms be synchronous, etc. these are all just technical details you have to work through in order to get the system you really need.
My advice to any of our customers setting out on a new project is :
- identify your desired PROPERTIES
- list your REQUIRMENTS
- select your CONSTRAINTS in order to induce the PROPERTIES w/o running counter to your REQUIREMENTS.
do that and you'll "win" every time.
Cheers