Wie ich REST meiner Ehefrau erklärte
(translated from Ryan Tomayko’s text, written 12.12.2004)
Ehefrau: Wer ist “Roy Fielding”?
Ryan: Irgendein Kerl. Er ist recht clever
Ehefrau: Ach, was hat er denn gemacht?
Ryan: Er hat geholfen, die ersten Web Server zu implementieren, und hat dann einen Haufen Forschung betrieben um zu erklären wieso das Web so funktioniert, wie es funktioniert. Sein Name ist auf der Spezifikation des Protokolls, was benutzt wird, um Seiten von einem Server in Deinen Browser zu laden.
Ehefrau: Wie funktioniert es denn?
Ryan: Das Web?
Ehefrau: Ja!
Ryan: Hmm. Eigentlich ist das alles ziemlich beeindruckend. Das komische an der Sache ist, dass das alles völlig unterschätzt wird. Das Protokoll über das ich geredet hab’, HTTP, kann ziemlich viele Dinge in recht eleganter Weise, was aber von Leuten aus irgendwelchen gründen ignoriert wird.
Ehefrau: Du meinst HTTP, so wie das, was ich beim Browser vor einer Adresse eingebe?
Ryan: Genau. Dieser Teil erklärt dem Browser, welches Protokoll zu verwenden ist. Das, was Du da eingibst ist einer der wichtigsten Durchbrüche in der Geschichte der EDV.
Ehefrau: Warum?
Ryan: Weil es in der Lage ist, den Standort von etwas von einem beliebigen anderen Standort auf der Welt zu beschreiben. Das ist das Fundament des Web. Du kannst es mit GPS-Koordinaten für Wissen und Information vergleichen.
Ehefrau: Für Web-Seiten?
Ryan: Eigentlich für alles mögliche. Dieser Mensch, Roy Fielding, hat in seinen Arbeiten viel darüber geschrieben worauf diese Sachen zeigen. Das Wreb ist in einer Architektur gebau, die man als “REST” bezeichnet. REST stellt eine Definition einer “Ressource”, die Dinge worauf diese Sachen dann zeigen.
Ehefrau: Eine Web-Seite ist eine Ressource?
Ryan: Sozusagen. Eine Web-Seite ist eine “Repräsentierung” einer Ressource. Ressourcen sind Konzepte. URLs – die Dinge´, die Du in Deinem Browser eingibst…
Ehefrau: Ich weiß, was eine URL ist!
Ryan: Oh, stimmt. Diese erzählen dem Browser, dass es irgendwo da draußen ein Konzept gibt. Im speziellen fragt der Browser nach der Repräsentierung des Konzeptes als Web-Seite.
Ehefrau: Was gibt es denn noch für Repräsentierungen?
Ryan: Eigentlich sind Repräsentierungen eine Sache, die nicht viel benutzt werden. Meistens hat eine Ressource nur eine Repräsentierung. Wir hoffen aber, dass Repräsentierungen in Zukunft mehr benutzt werden, weil überall ein Haufen neuer Formate auftauchen.
Ehefrau: Ist das noch so eine Robot-Sache?
Ryan: Nein, nicht wirklich. Ich meine nicht, dass Maschinen irgendwo am Schreibtisch sitzen und das web surfen. Aber Maschinen können das selbe Protokoll benutzen, um sich gegenseitig Nachrichten zukommen zu lassen. wir haben das schon einige Zeit getan aber keine der heutigen Techniken funktioniert gut wenn Du in der Lage sein willst mit allen Maschinen auf der ganzen Welt zu kommunizieren.
Ehefrau: Warum nicht?
Ryan: Sie wurden nicht dafür entworfen, sie in dieser Form zu benutzen. Als Fielding und seine Kollegen anfingen, das Web zu bauen, war die Fähigkeit mit einer beliebigen Maschine auf der ganzen Welt zu kommunizieren eines der wichtigsten Anliegen. Die meisten unsere Techniken, die wir bei der Arbeit benutzen, damit Computer miteinander reden, hatten diese Anfordeung nicht. Du brauchtest nur mit einer kleinen Gruppe von Maschinen zu reden.
Ehefrau: Und nun musst Du mit allen Maschinen reden?
Ryan: Ja – und noch mehr. Wir müssen mit allen Maschinen über all das Zeug reden, das sich auf allen anderen Maschinen befindet. Also brauchen wir einen Weg, damit eine Maschine einer anderen Maschine über eine Ressource erzählt, die sich auf einer noch ganz anderen Maschine befindet.
Ehefrau: Hä?
Ryan: Stell Dir vor Du sprichst mit Deiner Schwester und sie möchte zum Beispiel den Kehrer von Dir leihen. Aber Du hast es nicht – Deine Mutter hat es gerade. Also sagst Du Deiner Schwester, es von Mutter zu bekommen. Das passiert im echten Leben ständig und es passiert ständig, wenn Maschinen anfangen, miteinander zu reden.
Ehefrau: Wie erzählen sich denn dann Maschinen, wo die dinge sind?
Ryan: Die URL natürlich. Wenn alles, worüber sich Maschinen unterhalten müssen, eine URL besitzt hast Du das Maschinen-Äquivalent eines Substantivs geschaffen. Dass Du und ich und der Rest der Welt uns darauf geeinigt haben, über Substantive in einer bestimmten Art und Weise zu reden, ist ziemlich wichtig, oder?
Ehefrau: Jop
Ryan: Maschinen haben kein universelles Substantiv – warum sie auch so beschissen sind. Jede Programmiersprache oder Datenbank hat einen anderen Weg über Substantive zu reden – weshalb die URL auch so wichtig ist. Es lässt all diese Systeme sich über Substantive austauschen.
Ehefrau: Wenn ich auf eine Web-Seite schaue, ist das nicht die Art, wie ich darüber nachdenke
Ryan: Niemand tut das. Außer Fielding und eine handvoll weitere Leute. Deshalb sind Maschinen immer noch beschissen.
Ehefrau: Was ist denn mit Verben, Pronomen und Adjektiven?
Ryan: Lustig, dass Du fragst, denn das ist ein anderer großer Aspekt von REST. Naja, Verben sind’s auf jeden Fall.
Ehefrau: Ich hab’ nur einen Witz gemacht.
Ryan: Es war ein lustiger Witz, aber eigentlich ist es gar keiner. Verben sind wichtig. Es gibt ein mächtiges Konzept in der Programmierung und Theorien der Computerwissenschaften namens “Polymorphismus”. Das ist ein streberhafter Weg zu sagen, dass man die selben Verben auf verschiedene Substantive anwenden kann.
Ehefrau: Versteh’ ich nicht.
Ryan: Nun…schau auf den Kaffeetisch. Was sind die Substantive? Tasse, Brett, Tageszeitung, Fernbedienung. Nun, nennst Du mir mal ein paar Dinge, die Du mit all diesen Dingen machen kannst?
Ehefrau: Versteh’ ich nicht…
Ryan: Du kannst Sie nehmen, oder? Du kannst sie holen. Umschmeißen, verbrennen. All diese Verben kannst Du auf all die Dinge hier anwenden.
Ehefrau: OK…und?
Ryan: Nun, das ist wichtig. Was wäre zum Beispiel, wenn ich anstatt “Hol’ mir die Tasse” und “Hol’ mir die Zeitung” und “Hol’ mir die Fernbedienung” – was wenn wir uns andere Verben für all die verschiedenen Substantive ausdenken müssten? Ich könnte das Wort “holen” nicht universal benutzen, sondern müsste mir ein neues Wort für jede Verb-Substantiv-Kombination ausdenken.
Ehefrau: Meine Güte! Das wäre sehr komisch.
Ryan: Ja, das wäre es. Unsere Gehirne sind irgendwie clever genug, um zu verstehen, dass die selben Verben auf verschiedene Substantive angewendet werden können. Manche Verben sind spezifischer als andere und können nur auf einen kleinen Satz von Substantiven angewendet werden. So kann ich zum Beispiel keine Tasse fahren und ich kann kein Auto trinken. Aber manche Verben sind nahezu universell anwendbar wie HOLEN (GET), SETZEN (PUT), und LÖSCHEN (DELETE)
Ehefrau: Du kannst keine Tasse löschen
Ryan: Aber Du kannst sie wegschmeißen. Das war wieder ein Witz, oder?
Ehefrau: Ja
Ryan: Naja, jedenfalls HTTP – dieses Protokoll das Fielding und seine Freunde erschaffen haben – handelt darüber Verben auf Substantive anzuwenden. Wenn Du zum Beispiel zu einer Webseite gehst macht der Browser ein GET auf die URL, die Du eingegeben hast und zurück kommt eine Webseite.
Webseiten haben oftmals Bilder, oder? Dies sind eigene Ressourcen. Die Webseite enthält die URLs, um an diese Bilder zu kommen und der Browser führt weitere HTTP GETs aus, bis dass alle Ressourcen geholt wurden und die komplette Webseite angezeigt werden kann. Das wichtige ist jedoch, dass ich sehr verschiedene Substantive in der gleichen Art und Weise behandelt werden können. Ob das Substantiv ein Text ist, ein Bild, ein Video, ein mp3, eine Präsentation, was auch immer – ich kann all diese Dinge holen, wenn ich die URL kenne.
Ehefrau: Klingt so, als ob das GET ein ziemlich wichtiges Verb ist.
Ryan: Es ist wichtig. Speziell wenn Du ein Web Browser benutzt, da Browser hauptsächlich Sachen “holen”. Sie haben keine großartig anderen Interaktionen mit Ressourcen. Das ist ein Problem, da viele Leute davon ausgehen, dass HTTP nur zum holen von Ressourcen dient. HTTP ist aber eigentlich ein universelles Protokoll um Verben auf Substantive anzuwenden.
Ehefrau: Cool. Aber ich sehe immer noch nicht, was das ändert. Was für Verben und Substantive willst Du denn?
Ryan: Nun, die Substantive sind nicht im richtigen Format. Stell Dir vor, Du surfst auf amazon um mir etwas zu Weihnachten zu schenken und jedes dieser Produkte ist ein Substantiv. Wenn diese jetzt in einer maschinenlesbaren Form zur Verfügung ständen könnte man jede Menge abgefahrene Sachen machen.
Ehefrau: Warum kann eine Maschine eine normale Webseite nicht verstehen?
Ryan: Weil Web-Seiten dafür entworfen sind, von Menschen verstanden zu werden. Einer Maschine sind Anordnung und Styling egal. Maschinen brauchen in der Regel nur die Daten. Im Idealfall hätte jede URL eine Repräsentierung für Leute und eine für Maschinen. Wenn Die Maschine ein GET auf die URL macht, bekommt sie eine maschinenlesbare Form. Wenn ein Browser die Ressource für einen Menschen holt, bekommt sie eine für Menschen lesbare Form.
Ehefrau: Also müssten Leute maschinenlesbare Formate für alle Ihre Seiten machen?
Ryan: Wenn es wertvoll wäre.
Schau, wir haben recht abstrakt über dieses Thema geredet. Wie wär’s mit einem echten Beispiel. Du bist ein Lehrer – in der Schule hast Du wahrscheinlich ein Computersystem, oder eher drei oder vier davon, die dir erlauben, die Schüler zu verwalten. In welchen Klassen sie sind, welche Noten sie bekommen, Notfallkontakte, Information über Bücher, die Du zum lehren benutzt, usw. Wenn das System web-basiert ist, gibt es wahrscheinlich eine URL für all die relevanten Substantive: Schüler, Lehrer, Klasse, Buch, Raum, usw. Im Moment gibt Dir der Zugriff über einen Browser eine Web-Seite. Wenn es eine maschinenlesbare Repräsentierung für all diese URLs gäbe, wäre es trivial, das System mit neuen Werkzeugen zu erweitern, da all die Information in der selben Art und Weise konsumiert werden kann. Es würde die Kommunikation zwischen den Maschinen untereinander vereinfachen. Oder, Du könntest ein Landes- oder bundesweites System schaffen, dass die Zeugnisse von allen Schulen sammelt. Es gibt da unendlich viele Möglichkeiten.
All diese Systeme würden über ein simples HTTP GET Informationen aus einem anderen System lesen. Wenn ein System etwas zu einem anderen hinzufügen möchte würde es ein HTTP POST durchführen. Eine Aktualisierung erfolgt über ein HTTP PUT. Die verbleibende Hürde ist, sich zu einigen, wie die Daten aussehen müssen.
Ehefrau: Das ist es also woran all die Computerleute im Moment arbeiten? Zu definieren, wie die Daten aussehen?
Ryan: Leider nicht. Stattdessen sind eine große Mehrheit damit beschäftigt, Schichten über Schichten an komplexen Spezifikationen zu schreiben um genau diese Sachen in einer anderen Art und Weise zu machen, die nicht ansatzweise so nützlich oder eloquent sind. Die Substantive sind nicht universell, die Verben nicht polymorph. Wir schmeißen Dekaden von Erfahrungen im echten Leben und bewährte Technologie über Bord und fangen mit etwas an, das Systemen ähnelt, die schon in der Vergangenheit versagt haben. Wir benutzen HTTP, aber nur damit wir weniger mit unseren Netzwerk- und Sicherheitsspezialisten reden müssen. Wir tauschen Einfachheit gegen glitzernde Werkzeuge und Assistenten ein.
Ehefrau: Warum?
Ryan: Keine Ahnung
Ehefrau: Warum sagst Du nichts?
Ryan: Vielleicht tue ich das.