The interface that a computer system, library or application provides in order to allow requests for services to be made of it by other computer programs, and/or to allow data to be exchanged between them.
Provides a defined set of functionality, or a service, to other applications
Service Oriented Architecture is a paradigm for organizing and utilizing distributed capabilities that may be under the control of different ownership domains.
What the hell does that mean?
It means we're shifting development paradigms...
...sort of!
Modularity
Modular software limits the relationship between distinct parts of a system to well defined interfaces
Long considered a good trait of software
Ever Higher Levels of Modularity
Direct interaction with hardware replaced by OS APIs
Libraries provide support for image and document manipulation
Networked systems allow modules to reside on disparate machines
Old and Busted Development
Old and Busted Code
Old and Busted Design
Core functionality duplicated across code
Core functionality tied to presentation (HTML)
How would another application access your innovative functionality?
New Hotness Development
New Hotness Code
New Hotness Design
Core functionality in a central location
Presentation separate from functionality
Calls to service methods provide functionality to you and other applications
Service-oriented design
Safer modification of core functionality
Simplifies future growth of the application
Provides hooks for extensions
Allows for simple addition of public API
But most importantly...
Huge profits by jumping on service-oriented architecture bandwagon
Street cred by jumping on Web 2.0 bandwagon
Should my app have an API?
Depends on you, your goals, your infrastructure
Benefits of public APIs:
Builds goodwill with developers
Allows for creation of new and innovative tools that utilize your app's data in new (and often unexpected) ways
Allows for alternative input mechanisms: desktop apps, mobile apps, etc.