I was tipped this great blogpost by Martin Fowler. You might resent from using the third level due to performance and bandwidth issues, but from an API-perspective it surely is very flexible and above all self-documenting.