Resources:
Application state and functionality are abstracted into resources. Every resource is uniquely addressable via a global identifier (URI in HTTP). All resources share a uniform interface for transfer of state between client and server. Resource consists of a constrained set of well defined operations. Resource consists of a constrained set of content types, each optionally supporting code on demand. A resource may have multiple representation.
Protocol:
REST consist of a protocol which is client-server, stateless, cacheable, layered. HTTP separates the notions of a web server and a web browser. This allows the implementation of each to vary from the other based on the client-server principle. When used RESTfully, HTTP is stateless. Each message contains all the information necessary to understand the request. As a result, neither the client nor the server needs to remember any state between messages. (Other articles indicate that state can be maintained on the client side, but not on the server side).
In order to manipulate these resources, components of the network communicates via standardized interface (HTTP). Any connector (components, servers, caches, tunnels, firewalls, etc.) can mediate the request. An application can interact with a resource by knowing two things: the identifier of the resource, and the action required. It does not need to know whether there are caches, proxies, gateways, firewalls, tunnels, or anything else between it and the server actually holding the information. The application does, however, need to understand the format of the information returned.
REST's client-server separation of concerns simplifies component implementation, reduces the complexity of connector semantics, improves the effectiveness of performance tuning, and increase scalability of pure server components. Layered system allow intermediaries — proxies, gateways, and firewalls — to be introduced at various points in the communication without changing the interfaces between components, thus allowing them to assist in communication translation or improve performance via large-scale, shared caching. REST enables intermediate processing by constraining messages to be self-descriptive: interaction is stateless between requests, standard methods, and media types are used to indicate semantics and exchange information, and response explicitly indicate cacheability.
Comparison with other client-server technologies:
RPC vs REST
SOAP vs REST
SOA vs REST





