REST

REST, short for Representational State Transfer, is an architectural style for distributed, network-based software systems. It was defined by Roy Fielding in Chapter 5 of his 2000 PhD dissertation, “Architectural Styles and the Design of Network-based Software Architectures,” where it is presented as a way to capture the design principles that make the World Wide Web work at scale.

Fielding describes REST as a hybrid style derived from several of the network-based architectural styles in his dissertation, combined with additional constraints that define a uniform connector interface. The style is built around resources, which are identified by identifiers such as URLs, and representations of those resources, which clients exchange with servers.

Among REST’s defining constraints are a client-server separation of concerns, statelessness in which each request carries all the information needed to understand it, the ability to cache responses, and a uniform interface between components. Together these constraints are meant to produce systems that are scalable, evolvable, and able to grow without central coordination.

Because REST was derived in part to explain and justify the design of HTTP, it maps naturally onto the Web’s existing mechanics: addressable resources, a small set of standard methods, and self-describing messages. In practice, REST became the dominant model for designing application interfaces over HTTP, where resources are exposed at stable URLs and manipulated through standard verbs.