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.
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.
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.
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.
Our users should also be able to leverage experience with one OpenStack API to quickly get up to speed with another one.
Our APIs should be as fast as possible. For example, they should be cacheable.
It should be possible to easily build Web browser-based clients for OpenStack APIs, without using extensions or plug-ins.
Our APIs should allow for growth in functionality and scalability.
There should be one obvious way of doing something, rather than multiple alternatives with subtle differences.