the "dumb client/smart data" meme is something i've used for a few
years as a "hook" - a way to get folks to think a bit. IRL, it's too
simplistic (as Mike Kelly already pointed out).
for example, I do a training exercise for those working on message
design that starts w/ a "raw message" for a human-driven client app:
<list>
<user>
<id>123</id>
<name>Mike</name>
<email>
mam...@yahoo.com</email>
</user>
...
</list>
with a custom client that knows how to:
- construct URIs
- add, update, delete records
- search records
You could call all the above" out of band" knowledge since it does not
appear _in_ the message (in band)
gradually, through design and coding exercises, each of these
"hard-coded" parts of the client are removed
- no more URI construction,
- no more hard-coding on how to create a payload, which method to use,
which URI to use, etc.,
no more hard-coding to create a valid search request
this hard code is replaced by code that recognizes affordances and
interprets them accordingly.
eventually the code and the message look quite different:
<list>
<query rel="search" href="...">
<field id="name" value="" />
</query>
<new href="...">
<field id="name" value="" />
<field id="email" value="" />
</new>
<item href="...">
<field id="name">Mike</field>
<field id="email"l>
mam...@yahoo.com</field>
</item>
...
</list>
You could say that there is more information "in band" now (in the
mesasge) and less "out of band" (in the client)
as a "kicker", the last step in the exercise is a server that produces
an entirely new set of fields and affordance details using the same
message design. A well-built client will work just fine when it
encounters this new "in band" information.
<list>
<query href="..." rel="search">
<field id="country" />
</query>
<new href="...">
<field id="country" value="" />
<field id="continent" value="" />
<field id="hemisphere" value="" />
</new>
<item href="...">
<field id="country" value="Brazil" />
<field id="continent" value="South America" />
<field id="hemisphere" value="Southern" />
</item>
...
</list>
so, as the message gains "smarts" the client loses some code (and
domain-specific bits) but the client also gains some new code that
"binds" to the media type and it's affordances.
The example is somewhat trivial, but when you apply this pattern to an
entire problem domain, the gains can be substantial.