In REST, a resource is any piece of information on the web that can be named (identified) and accessed using a URI (Uniform Resource Identifier) or URN (Uniform Resource Name). You act upon a resource using well-defined operations. As an example, you can act upon a URI by using the following HTTP methods:
An example of a resource is a graphical image stored on a server whose location is specified with a URI. The image can exist/manifest in several forms (such as JPEG or PRN), which constitute the representation of the resource.
Utilizing separation of concerns assists in viewing a complex system in terms of different tiers (presentation, business, and data access). The result is improved modularity (individual component development), encapsulation (information hiding), and loose coupling.
The term uniform interface refers to an architectural style that promotes a component interaction model where all the components in a client/server, component-based application expose the same generic interface. It aims to provide a generalized, unified view of a system to ease the component interaction. For example, a client can use the same interface to communicate with any web service.
A layered system refers to an architectural approach that organizes the components in the system into hierarchical layers, each layer providing services to the layer above it and using/hiding the services of the layer below it.
Client-stateless-server communication is one of the core principles of the REST philosophy. In fact, no session state is allowed on the server. Each request from a client must contain all of the information necessary to process the request. REST also discourages the use of cookies because they are a form of state. When requests are independent and self-contained, they can be cached on the server. REST encourages using HTTP authentication, making HTTP the protocol of choice, and storing session state entirely on the client tier.