Designing APIs poses multiple challenges, among them:
- APIs are targeted at developers
- APIs have 'stickiness'. A bad APIs is a nightmare for years as many internal and extenal apps depend on it.
- APIs are shared by many applications, so problems can impact multiple applications (differently)
- APIs must be discoverable, intuitive, and use consistent conventions
- Versioning and backwards compatibility on change
- Good (and updated/correct) documentation is required
- Likewise, automated testing is required
But there are benefits for exposing APIs even internally:
- hide implementation
- reuse code
- reduce duplication
- easier to optimize
Exposing APIs externally has many market benefits that we'll discuss separately. Just note that all major platforms (Facebook, Linkedin, Windows/Win32) are really APIs; and being a 'platform' can be very beneficial to a provider.