All slides are copyright © 1996-2000 Roy T. Fielding.
The software architecture of a distributed system has a considerable impact on its performance, both in terms of network efficiency and application-user perception. The architecture determines how system components are allocated and identified, how the components interact to form a system, and the amount and granularity of communication needed for interaction. Many different architectural styles have been used in the composition of distributed systems, including pipe-and-filter, remote sessions, event-based integration (implicit invocation), client/server (explicit invocation), distributed objects, and a variety of distributed process paradigms. Each of these styles are intended to optimize a particular pattern of communication among the components.
The World Wide Web architecture has evolved into a novel architectural style that I call "representational state transfer." Using elements of the client/server, pipe-and-filter, and distributed objects paradigms, this style optimizes the network transfer of representations of a resource. A Web-based application can be viewed as a dynamic graph of state representations (pages) and the potential transitions (links) between states. The result is an architecture that separates server implementation from the client's perception of resources, scales well with large numbers of clients, enables transfer of data in streams of unlimited size and type, supports intermediaries (proxies and gateways) as data transformation and caching components, and concentrates the application state within the user agent components.
However, we need to distinguish between the architectural style and its current instantiation in WWW technology (URL, HTTP, HTML, Java applets, etc.). Understanding the style reveals why the current WWW protocols are successful, where they are deficient, and provides a model for evaluating proposals for future enhancements and new protocols. Similarly, when a proposed application requires a pattern of communication that is contrary to representational state transfer, an awareness of architectural styles should help the designer choose a more appropriate architecture, perhaps acting in parallel with the Web, rather than shoehorn the application into existing WWW technology.
The World Wide Web (WWW) Project has experienced phenomenal growth in the deployment and use of its technologies. Web addresses (URLs) can now be seen in every form of advertisement -- magazines, radio, television, and even on the banners of passing airplanes -- each directing the reader to further information resources. Most of the hype associated with this growth has focused on the browser technology (Mosaic, Netscape, etc.), but such clients are actually the least significant aspect of Web technology and the easiest to replace.
This presentation will examine the underlying technology of the Web, including discussion of the WWW Project history and the philosophy behind its design, how that design is (and is not) reflected in current Web products, and the shape of things to come. My primary focus will be on the importance of simplicity and extensibility in the Web design, and the lessons learned when one principle was sacrificed for the other.
Continued development of the WWW infrastructure is important because it will lead to the infrastructure of a Global Software Engineering Environment (gSEE), which in turn will support additional collaborative development projects on a global scale. This talk discusses the WWW, collaborative development, the Apache HTTP server project, and the lessons learned which will (hopefully) be applied to a future gSEE.
Over the past two years, the World-Wide Web Project has experienced double- exponential growth in the deployment and use of its technologies. Web addresses (URLs) can now be seen in every form of advertisement--magazines, radio, television, and even on the banners of passing airplanes -- each directing the reader to further information resources. All of the hype associated with this growth has focused on the browser technology (Mosaic, Netscape, etc.), but such clients are actually the least significant aspect of Web technology and the easiest to replace.
This presentation will examine the underlying technology of the Web, including discussion of the WWW Project history and the philosophy behind its design, how that design is (and is not) reflected in current Web products, and the architecture which will enable the next generation of Web software to become truly ubiquitous. Our primary focus will be on the scalability, extensibility, and low entry-barriers present in the Web design. In addition, we will discuss the dynamics of globally-distributed software engineering teams and their role in building the Web as a collaborative development effort.