REST
Obwohl REST per Definition nicht an ein Protokoll gebunden ist, wird es in der Praxis fast ausschließlich in Verbindung mit HTTP verwendet um Informationen als Web-API zur Verfügung zu stellen.
Damit ein Service RESTful ist, muss es die folgenden Rahmenbedingungen berücksichtigen.
Client | Server
Die Zuständigkeiten werden getrennt. Der Server stellt Dienste bereit die vom Client genutzt werden können. Ein Server bedient dabei üblicherweise mehrere oder sogar eine Vielzahl an Clients.
Bei diesem Prinzip steht vor allem die unabhängige Entwicklung der beiden Komponenten im Fokus. Anpassungen an einem Client wie zum Beispiel einer Webanwendung müssen nicht mit Änderungen am Server einhergehen oder umgekehrt. Sie können individuell voneinander betrachtet werden und kommunizieren über eine definierte Schnittstelle.
Zustandslosigkeit
Eine Anfrage enthält alle notwendigen Informationen die für die Verarbeitung am Server benötigt werden. Auf dem Server müssen also keine Zustandsinformationen gespeichert sein um die Aufgabe abzuarbeiten. Im üblichen Sprachgebrauch ist dann von stateless die Rede.
Das ermöglicht vor allem eine hohe Skalierbarkeit auf Serverseite da jeder Request für sich an einen anderen Server gesendet werden kann.
Caching
Die schnellste Abfrage ist diejenige die nicht gestellt werden muss. Nach diesem Prinzip sollen so viele Informationen wie möglich auf dem Client zwischengespeichert werden um weitere Anfragen an den Server und damit zusätzliche Wartezeiten zu vermeiden.
Einheitliche Schnittstelle
Das wohl wichtigste Prinzip von RESTful Services ist die einheitliche Schnittstelle. Anhand einer URL wird eine Ressource definiert auf die mit einer Methode (z.B. GET, POST, PUT) zugegriffen wird. Als Ergebnis einer Anfrage erhält man Informationen zu der angeforderten Ressource, was im gängigsten Fall in Form einer JSON-Antwort stattfindet. Das Format wird aber nicht zwingend vorgegeben.
Schichten
Das System ist in mehrere Schichten aufgeteilt. Für den Nutzer ist die wichtigste Schicht die Schnittstelle mithilfe derer er mit dem Service kommuniziert. Die weiteren Schichten wie die Business Logik oder der Datenzugriff sind für den Anfragenden vollkommen transparent. Das ermöglicht es jederzeit flexibel einzelne Komponenten und Technologien zu tauschen, ohne dass sich dies auf Anwendungen die auf die Schnittstelle zugreifen auswirkt. Man spricht hier von einem lose gekoppelten System.
Code on Demand
Hierdurch wird die Möglichkeit gegeben ausführbaren Code vom Server an den Client zu übertragen und dort auszuführen. Dadurch können Funktionen die eine bestimmte Logik ausführen ohne weitere zusätzliche Roundtrips zum Server direkt auf dem Client ausgeführt werden um weitere Anfragen zu vermeiden. Diese Rahmenbedingung ist als einzige der genannten optional. Ein Beispiel für Code on Demand wäre Javascript-Code der vom Server abgefragt und anschließend am Client ausgeführt wird.