This paper presents an approach to defining component-based software architectures in which interfaces rather than components play the key role. Architectural descriptions are built from `i-specs' that define interfacelevel interaction patterns. An i-spec can be seen as a contract defining the rights and obligations of `roles' that can be played in interface-based interactions. We introduce the `closed world assumption' for i-specs, leading to a compositional approach to defining software architectures. We show how i-specs can be composed and how component specifications can be constructed from i-specs.