An interface defines how a rad client can interact with an object. An object implements an interface, providing a concrete behavior to be invoked when a client makes a request.
The primary purpose of rad is to consistently expose the various pieces of the system for administration. Not all subsystems are alike, however: each has a data and state model tuned to the problems they are solving. Although there are major benefits to using a common model across components when possible, uniformity comes with trade-offs. The increased inefficiency and client complexity, and risk of decreased developer adoption, often warrant using an interface designed for problem at hand.
An interface is a formal definition of how a client may interact with a rad server object. An interface may be shared amongst several objects, for example, when maintaining a degree of uniformity is possible and useful, or may be implemented by only one. A rad interface is analogous to an interface or pure abstract class in an object oriented programming language. In the case of rad, an interface consists of a name, the set of features a client may interact with, optionally a set of derived types referenced by the features, and a version. The features supported include:
Methods, which are procedure calls made in the context of a specific object
Properties, which are functionally equivalent to methods but bear different semantics
Asynchronous event sources