Der REST-Standard basiert auf sechs Prinzipien, die unten aufgeführt sind. Sie gehen auf den Informatiker Roy Fielding zurück, der sie im Jahr 2000 erstmals vollumfänglich beschrieb. Eine API, bei der alle obligatorischen Prinzipien umgesetzt wurden, bezeichnet man auch als RESTful. Prinzip 6 (Code-on-Demand) gilt als optional.
1. Client-Server-Architektur
Die vorausgesetzte Trennung von Client (Dienstnutzer) und Server dient der Aufgabenverteilung. Praktisch heißt das, dass über die Benutzeroberfläche einer Software Dienste angefragt werden, die ein Server bereitstellt (z.B. ein Datenbank-Server). Dadurch ist es leichter, das System zu skalieren, denn beide Komponenten können unabhängig voneinander weiterentwickelt werden.
2. Zustandslosigkeit
Anfragen von einem Client müssen alle Informationen enthalten, die der Server benötigt, um diese verarbeiten zu können. Der Server darf keine Zustandsdaten über den Client speichern. Das sorgt ebenfalls für Skalierbarkeit, da eingehende Anfragen auf beliebige Maschinen verteilt werden können.
3. Cache-Fähigkeit
Häufig vorkommende Antworten eines Servers sollten zwischenspeicherbar sein, um diesen nicht unnötig zu belasten. Für die Daten im Zwischenspeicher (Cache) muss aber definiert sein, wie lange sie vorgehalten werden sollen. Dies ist erforderlich, damit der Client keine veralteten Informationen erhält.
4. Einheitliche Schnittstelle
Die Interaktion zwischen Client und Server erfolgt gemäß einheitlicher Standards, die auf vier Bedingungen beruhen:
- Adressierbarkeit von Ressourcen: Eine Server-Ressource kann verschiedenste Daten beinhalten, sie muss aber über eine URL eindeutig adressierbar sein.
- Repräsentationen zur Veränderung von Ressourcen: Clients können mit Ressourcen über Repräsentationsformate wie JSON oder XML interagieren. Solche Formate enthalten alle nötigen Informationen zum Verändern oder Löschen einer Ressource.
- Selbstbeschreibende Nachrichten: Nachrichten müssen die für die Interpretation durch einen Client oder Server notwendigen Informationen bereits enthalten.
- HATEOAS (Hypermedia as the Engine of Application State): Dies bedeutet, dass Clients mit Hilfe von Links, die in die Server-Antworten eingebettet sind, dynamisch durch Anwendungsressourcen navigieren können.
5. Mehrschichtige Systeme
Anfragen müssen durch unabhängige Netzwerkschichten wie Proxyserver oder Load Balancer geleitet werden können. Der Client- oder Servercode soll dabei nicht verändert werden. Solche Zwischenschichten können die Leistung und Sicherheit eines Systems stark verbessern.
6. Code-on-Demand (optional)
Dieses Prinzip besagt, dass der Server im Bedarfsfall Code zur lokalen Ausführung an den Client übertragen darf.