This chapter discusses the different views of what software architecture is. It looks at distributed architectural styles, otherwise known as architectural styles for network-based applications. Software application architecture is the process of defining a structured solution that meets all of the technical and operational requirements, while optimizing common quality attributes such as performance, security, and manageability. Software architecture is an abstraction of the run-time elements of a software system during some phase of its operation. Fielding examines several architectural styles for network-based applications. These could potentially apply to many different kinds of middleware. Fielding also describes architectural properties that allow one to differentiate between architectural styles. A non-interactive communication would often include large file transfers, because one or more of the application program itself, the input data, and the output data may be uploaded to the cloud or downloaded from the cloud.