• It must be a client-server system
• It has to be stateless—there should be no need for the service to keep users’
sessions; in other words, each request should be independent of others
• It has to support a caching system—the network infrastructure should
support cache at different levels
• It has to be uniformly accessible—each resource must have a unique address
and a valid point of access
• It has to be layered—it must support scalability
• It should provide code on demand—although this is an optional constraint,
applications can be extendable at runtime by allowing the downloading of
code on demand, for example, Java Applets