Governance/Proposed/APIGoals

= Goals for OpenStack APIs =

This is a list of proposed high-level goals for OpenStack's APIs; it doesn't mandate specific approaches or technologies, but rather motivates their selection.

Please add proposed goals to the bottom, after checking to make sure your goal isn't already listed.

Stable
Each successive implementation of the APIs should always be backwards-compatible; i.e., a client for the previous release should work with the successive release. Old features / APIs can be phased out in a controlled way.

Broadly Usable
OpenStack APIs should be able to be easily used by a variety of potential clients, not just those using a particular platform, programming language, or data store.

Simple
We prefer simple solutions over layers of complexity. Our users should be able to leverage their existing knowledge, implementations, and tools as much as possible when working with OpenStack APIs. Wherever possible, off-the-shelf technologies and techniques should be used, so as to reduce the amount that potential users need to learn.

Consistent
Our users should also be able to leverage experience with one OpenStack API to quickly get up to speed with another one.

Performant
Our APIs should be as fast as possible. For example, they should be cacheable.

Browsable
It should be possible to easily build Web browser-based clients for OpenStack APIs, without using extensions or plug-ins.

Extensible
Our APIs should allow for growth in functionality and scalability.

Obvious
There should be one obvious way of doing something, rather than multiple alternatives with subtle differences.