Eine Programmierschnittstelle ermöglicht dem Programmierer den Zugriff auf andere Anwendungen, andere Systeme oder deren Funktionen. JDBC beispielsweise ist eine Datenbankschnittstelle – also allgemeiner eine API –, die Klassen anbietet, mit denen sich einfach eine Verbindung zu einer Datenbank herstellen und sich Daten lesen oder schreiben lassen. Dazu können dann Klassen gehören, die Datenbankanweisungen (SQL-Anweisungen) repräsentieren, die abgefragte Datenbanksätze enthalten oder die als Ausnahmen bestimmte Funktionen erfüllen, beispielsweise SQLSyntaxErrorException. Zur API können auch Schnittstellenklassen (Interfaces) gehören oder Treiber, über die wie hier auf eine Datenbank zugegriffen wird.
Der Programmierer selbst muß sich um Details nicht mehr kümmern, er muß nur wissen, wie die Schnittstelle funktioniert. Wie nun eine Verbindung über ein Netz zu einer Datenbank aufgebaut wird, wie die Klasse java.sql.Time die Zeit darstellt, damit sie in eine Datenbank geschrieben werden kann, das ist Sache der Schnittstelle.
Abstrakter wird es, wenn man sich Klassen wie String anschaut, die zur Java-API gehören. Der Programmierer kann damit komfortabel Zeichenketten verwalten, doch wie sie intern von Java oder der JVM (virtuelle Maschine) kodiert werden, das muß er nicht wissen.
Ein anderes Beispiel ist java.io. Hier gibt es Klassen, mit denen sich Dateien lesen oder schreiben lassen, aber wie die JVM das bewerkstelligt und welche Schnittstellen des Betriebssystems sie wiederum nutzt, das muß man nicht wissen. Da die JVM auf unterschiedlichen Betriebssystemen und unterschiedlicher Gerätschaft läuft, kann das sogar auf einem anderen Rechner ganz anders funktionieren – der Programmierer sieht jedoch nur seine Schnittstelle, und die bleibt gleich: schreibene mit write(), lesen mit read(), wenn man es so grob vereinfachen möchte.
Noch ein Beispiel wäre eine API zum Lesen oder Schreiben von XML-Dateien, so daß der Programmierer einfach in einer Vorschleife alle Tags durchlaufen und dort mit einfachen Methodenaufrufen wie getNextAttribute() auf Attribute zugreifen kann, ohne sich um das Lesen von Zeichen aus einer XML-Datei oder deren Aufbau zu kümmern.
Eine Programmierschnittstelle ist also recht allgemein und nicht mehr als ein Übergang zu einem anderen System, anderen Anwendungen, anderen Funktionen, ob es nun eine Zeichenkette ist, der Zugriff auf das Druckersystem oder gleich eine Schnittstelle zur 3D-Beschleunigung (OpenGL) oder zum Auslesen von Satellitenbildern der Nasa (World Wind).
Man kann es auch anders sagen: Es ist eine Abstraktionsschicht, hinter der sich ein komplexeres System verbirgt. Deren Funktionsweise und Details werden hinter einer einfachen Schnittstelle verborgen und damit abgekoppelt. Damit können sie auch unabhängig geändert und verbessert werden, so lange die Schnittstelle gleich bleibt.
Und noch ein Bild für den absoluten Laien: Eine Programmiererschnittstelle ist aus Sicht eines Programmiers eine programmiererfreundliche Schalttafel, so wie der Musikfreund vor seiner Dolby-Surround-Anlage steht, viele Knöpfe und Schalter sieht, die alle etwas tolles machen, während das Wie in dem Kasten dahinter versteckt ist. Bei Software kommt noch hinzu, daß sich das Wie ändern kann.