RAD Version Numbering

RAD uses a major.minor versioning scheme. When a compatible change to an interface is made, its minor version number is incremented. When an incompatible change is made, its major version number is incremented and its minor version number is reset to 0.

In other words, an implementation of an interface that claims to be version X.Y (where X is the major version and Y is the minor version) must support any client expecting version X.Z, where Z <= Y.

The following interface changes are considered compatible:

  • Adding a new event

  • Adding a new method

  • Adding a new attribute

  • Expanding the access supported by an attribute, for example, from read-only to read-write

  • A change from nullable to non-nullable for a method return value or readable property, that is, decreasing the range of a feature

  • A change from non-nullable to nullable for a method argument or writable property, that is, increasing the domain of a feature

The following interface changes are considered incompatible:

  • Removing an event

  • Removing a method

  • Removing an attribute

  • Changing the type of an attribute, method, or event

  • Changing a type definition referenced by an attribute, method, or event

  • Decreasing the access supported by an attribute, for example, from read-write to read-only

  • Adding or removing method arguments

  • A change from non-nullable to nullable for a method return value or readable property, that is, increasing the range of a feature

  • A change from nullable to non-nullable for a method argument or writable property, that is, decreasing the domain of a feature

Note:

An interface is more than just a set of methods, attributes, and events. Associated with those features are well-defined behaviors. If those behaviors change, even if the structure of the interface remains the same, a change to the version number might be required.

A RAD client can access version information from a client binding. The mechanism for accessing the information depends on the client language like C, Java, and Python. For example, in Python, the rad.client module contains the rad_get_version function, which may be used to get the version of an API.