The WSRP specification (WSRP specification version 1, 2003) requires that every producer implement two required interfaces, and allows optional implementation of two others: 1. Service Description Interface (Required): This interface allows a WSRP producer to advertise services and its capabilities to consumers. A WSRP consumer can use this interface to query a producer to discover what user-facing services the producer offers. Furthermore, the description also contains additional metadata and technical capabilities of the producer. The producer’s metadata might include information about whether the producer requires registration or cookie initialization before a consumer can interact with any of the remote portlets. For the consumer, this interface can be used as a discovery means to determine and localize the set of offered remote portlets. 2. Markup Interface (Required): This interface allows a consumer to interact with a remotely running portlet supplied by the producer. For example, a consumer would use this interface to perform some interaction when an end-user submits a form from the portal page. Since this interface supports the notion of the state, the portal might obtain the latest markup based on the current state of the portlet (for example, when the user clicks refresh button or interaction with another portlet on the same page takes place). 3. Registration Interface (Optional): This interface serves as a mechanism for opening a dialogue between the producer and consumer so that they can exchange information about each others’ technical capabilities. The registration interface allows a producer to ask consumers to provide additional information before they start interaction with the service through the service description interface and markup interfaces. This mechanism enables a producer to customize its interaction with a specific type of consumer. For example, a producer may use a filter and reduce the number of offered portlets for a particular consumer. 4. Portlet Management Interface (Optional): This interface gives the consumer control over the life-cycle methods of the remote portlet. A consumer acquires the ability to customize a portlet’s behavior, or destroy an instance of a remote portlet using this interface.