Transcript: REST

· Back to episode

Full episode transcript. Timestamps refer to the audio playback.

Dominik

Ja, hallo liebe Hörerinnen und Hörer, willkommen beim Python-Podcast, heute in der 29. Episode.

Dominik

Wir machen heute REST, Representational State Transfer.

Dominik

Was ist das eigentlich? Und hier ist der Dominik und ich bin da mit dem Jochen und heute wieder mit dem Johannes.

Dominik

Hallo, Glück. Hallo, Johannes. Hallo, Zeigen.

Dominik

Ihr kennt uns ja vielleicht schon, wenn ihr gehört habt, wir waren öfter schon mal in dieser Konstellation.

Dominik

Das heißt, wir stellen uns heute nicht vor. Aber wie gesagt, wir machen REST, Representational State Transfer.

Dominik

Ja, wen frage ich denn zuerst?

Dominik

Was ist denn das?

Jochen

Ich dachte, wir wollen nicht vielleicht zuerst die News machen,

Jochen

weil ich habe da auch noch so ein paar Sachen.

Dominik

Nein, nein, wir wollen erst mal kurz das Topic erklären

Dominik

und dann machen wir News.

Dominik

Kommen wir nicht mehr zu den News?

Dominik

Doch, die kommen noch zu den News.

Dominik

Na gut, okay.

Johannes

Erklär mal ganz kurz, was REST ist.

Johannes

Aber nur ganz kurz.

Johannes

Ja, das ist Elevator-Picture.

Jochen

Also, man stelle sich vor, man hätte da so eine Dampfmaschine.

Jochen

Na ja, warte mal.

Jochen

Also REST ist, also ich glaube, das beste Beispiel für, wie kann man sich das vorstellen, was das eigentlich ist, ist, man nimmt halt irgendwie das Web.

Jochen

Das ist ja mal krass.

Jochen

Genau, das ist das Web.

Jochen

Kurz vorm der Anleitung.

Jochen

Dann hat man dann so einen Browser und das ist eigentlich REST. Also das Web ist schon REST.

Jochen

Okay. Okay, News.

Johannes

Ich erkläre das immer anders. Ich erkläre das immer im Unterschied zu dem, was es nicht ist. Und was man früher gemacht hat, um APIs zu machen, war LPC, Remote Procedure Call, wo man halt Funktionen hatte, die man aufgerufen hat mit irgendwelchen Daten. Und REST ist jetzt eben nicht Funktionen, die man aufruft, sondern Objekte, die man abruft und verändert.

Johannes

das ist für mich so der

Johannes

Knackpunkt, was REST zu REST

Johannes

macht. Dass man nicht Funktionen

Johannes

aufruft, sondern Objekte

Johannes

abruft und verändert.

Dominik

Okay, jetzt suchen wir jetzt Objekt News ab.

Dominik

Jetzt machen wir News?

Dominik

Ja, jetzt machen wir News. Gut, okay, machen wir

Dominik

News.

Dominik

Pattern Matching!

Jochen

Pattern Matching ist auch tatsächlich der erste Punkt,

Jochen

den ich auf der Liste habe.

Johannes

Alle anderen Punkte sind unwichtig. Pattern Matching.

Johannes

Case, Switch, Case.

Jochen

Hast du da eigentlich dir schon mal Gedanken gemacht

Jochen

über Pattern Matching? Nur ganz

Jochen

am Rande. Ich habe sogar, ich fand das so gut,

Johannes

dass ich direkt einen Blogartikel auf meinen

Johannes

selten benutztes Blog

Johannes

geschrieben habe, weil das so wichtig ist und so toll,

Johannes

dass ich, ja klar, kriegt ihr natürlich

Johannes

einen Link dazu,

Johannes

dass ich das sofort schreiben

Johannes

musste. Und

Johannes

Pattern Matching

Johannes

ist so ein Feature, was es in anderen

Johannes

Sprachen, in vielen funktionalen Sprachen

Johannes

gibt, was man auch da kennt.

Johannes

Und wenn man das einmal gesehen hat,

Johannes

dann kann man nicht mehr ohne.

Johannes

Und ich habe früher an der Uni funktionales Programmieren gelernt und gemacht und war dann etwas schockiert, als ich zu Python kam und die hatten das nicht.

Johannes

Und habe es aber irgendwann vergessen, dass es das in Python nicht gibt.

Johannes

Und jetzt gibt es es irgendwann endlich wieder.

Dominik

Ja, aber es gibt doch If-Else. Warum brauche ich denn dann ein Switch Case?

Dominik

Ja, das ist prinzipiell richtig. Man kann das alles mit If-Else machen.

Johannes

Man kann auch prinzipiell jede Schleife aus While-Loops machen.

Johannes

Man kann prinzipiell auch alles aus Goto zusammenbauen.

Johannes

Man macht es nicht, weil das nicht gut ist.

Johannes

Und weil es bequemere Dinge gibt. Und gerade jetzt das Pattern Matching, was in Python reinkommt, ist meiner Meinung nach ein sehr mächtiges Pattern Matching. Die können matchen auf Typen und auf Werte und die können Variable Capture machen, wo eben so ganz komplizierte Fälle, die ein sehr langes If wären, dann auf einmal sehr einfach zu schreiben.

Johannes

Was ist ein Variable Capture?

Johannes

Was Pattern Matching macht, ist im Wesentlichen ein If, wo ich nicht hinschreibe, dass eine Bedingung wahr oder falsch ist, sondern ich schreibe eine Datenstruktur hin. Und wenn diese Datenstruktur vorgefunden wird, dann trifft dieses Pattern zu.

Johannes

Die erste coole Sache, die da passiert ist, dass man nicht mehr irgendwelche Dictionaries .get machen muss oder irgendwelche Listen gucken muss, ob die Länge größer 0 ist und dann das erste Element rausholen, sondern man schreibt einfach hin aus der Liste, das erste Element soll ein Attribut haben x und das soll den Wert y haben.

Johannes

Und wenn diese Struktur zutrifft, dann ist dieses Pattern gematcht. Ich habe in dem eben genannten Blogartikel ein Beispiel, wo es sehr eindeutig wird. Variable Capture heißt, dass ich in dieses Muster, was ich hinschreibe, in diese Datenstruktur, nicht nur konkrete Werte reinschreiben darf, sondern ich darf auch Variablen Namen reinschreiben.

Johannes

Und wenn diese Variablen Namen gefüllt werden können, dann stehen die mir in dem Branch, der dann aufgerufen wird, zur Verfügung. Das heißt, wenn ich zum Beispiel sage, das Pattern, was ich schreiben möchte, ist das erste Element der Liste ist der Float X, dann kann ich in dem Branch, der dann zutrifft, auf die Variable X zugreifen und es ist automatisch sichergestellt, dass das ein Float ist.

Johannes

Also es ist schon gecastet. Und das heißt Variable Capture, weil eben diese Variable sozusagen aus diesem Muster raus eingefangen wird.

Dominik

Das klingt sehr nützlich. Und wenn man das auch mit Typen und so machen kann.

Johannes

Das klingt, das ist super nützlich. Gerade das erste Beispiel, was man da sieht, ist eben diese Typen.

Johannes

Wenn ich eine Funktion schreibe, die vier verschiedene Typen annehmen kann, dann schreibe ich jetzt einfach Match Type von X, Case Int und dann ist es ein Int.

Johannes

oder Case 3, dann ist es ein Stereo.

Johannes

Das ist so viel

Johannes

einfacher, als das mit

Johannes

Ifs zu machen. Das ist sehr, sehr schön.

Dominik

Ja, fand ich auch. Es gab aber viel Gegenstimmen,

Dominik

muss ich sagen. Ja, es gab

Jochen

ganz schön Gegenwind. Es gibt ja schon seit einiger Zeit

Jochen

irgendwie Leute, denen das alles zu kompliziert wird

Jochen

und ich meine, da gab es ja auch diese große

Jochen

Kontroverse irgendwie beim

Jochen

Walrus Operator.

Jochen

Ja.

Johannes

Auch bei den Typen, bei dem

Johannes

Type Automation.

Dominik

3.10 ist doch irgendwie so eine Muss-Version, oder?

Dominik

Das ist nicht so eine Kann-Version, was da alles kommt.

Dominik

Also die Type-Annotations, die dabei sind,

Dominik

dass man einfach hinterschreiben kann,

Dominik

die Klasse beispielsweise, die das sein soll

Dominik

oder deren Instanz das sein soll,

Dominik

ohne dass man da groß Typer importiert.

Dominik

Und dann kann man so einen Union-Operator dahinter setzen.

Dominik

Und dann kann man da zwei verschiedene Typen haben.

Dominik

Das sieht alles total schick aus.

Dominik

Also ich finde, so wollte ich das schon immer lesen.

Jochen

Ja, also ich weiß nicht so genau.

Jochen

ich meine, bei denen, ich finde,

Jochen

diese Type Annotations, die

Jochen

sind halt an manchen Stellen total nett.

Jochen

Ob ich das jetzt an allen Stellen

Jochen

im Kult gerne hätte, weiß ich jetzt auch nicht.

Jochen

Du kannst ja einfach weglassen, das wäre das Schöne. Genau, genau.

Jochen

Ja, man kann es dann, genau.

Jochen

Und da, wo es halt Sinn macht, irgendwie,

Jochen

da kann man es dann halt dazu tun und dann ist es auch nett.

Jochen

Ich finde auch tatsächlich, das mache ich

Jochen

in letzter Zeit auch häufiger, irgendwie

Jochen

entweder Dataclasses

Jochen

Adress oder

Jochen

Pidentic verwenden

Jochen

und tatsächlich Klassen so

Jochen

hinzuschreiben, ist deutlich angenehmer

Jochen

als das irgendwie...

Jochen

Hatten wir Pydentik schon mal?

Jochen

Ich weiß nicht genau, ob ich es mal

Jochen

gepickt hatte oder so, kann sein.

Jochen

Was macht Pydentik?

Johannes

Du hast es auf jeden Fall mal erwähnt, glaube ich.

Johannes

Ich verlinke es auf jeden Fall nochmal, das ist ziemlich cool.

Jochen

Ja, genau.

Jochen

Ja, und also

Jochen

ich finde die

Jochen

diese Art

Jochen

sozusagen das Klassen hinzuschreiben

Jochen

sowieso irgendwie, macht irgendwie

Jochen

nett. Ich sehe, ich habe auch schon

Dominik

irgendwie hier ein paar Identity in der Doku mal rumgewühlt.

Dominik

Also eigentlich wollte ich wissen, was das ist, aber

Dominik

Ja, das ist so

Dominik

eine Art Mischung aus

Johannes

MyPi und Data Classes, oder

Johannes

Jochen? Man kann leicht

Johannes

Datentypen definieren mit bestimmten Typen und

Johannes

der prüft die dann auch noch. Genau,

Jochen

also es prüft das halt auch zur Laufzeit

Jochen

und es ist

Jochen

halt auch so, dass man dann halt so eine eingebaute

Jochen

Serialisierung nach JSON oder so auch mitkriegt,

Jochen

weswegen man es eigentlich auch super für so

Jochen

REST-Geschichten verwenden kann.

Jochen

REST-Geschichten? Was ist

Jochen

das denn, Jochen? Ja, Moment.

Jochen

Erstmal die Reste der News, bitte.

Jochen

Genau.

Jochen

Was haben wir denn

Jochen

da noch? Ja, so

Jochen

Pattern-Matching, ja, coole Sachen,

Jochen

da sind wir uns alle einig, irgendwie komisch.

Jochen

Naja.

Jochen

Es gibt neue Releases von UV-Loop und

Jochen

Async-PG und so,

Jochen

aber da war jetzt auch nichts

Jochen

weltbewegendes dabei, aber

Jochen

Aber Async-PG ist auch so ein Ding, was man sich unbedingt mal angucken kann.

Dominik

Ja, ich wollte gerade sagen, wovon hast du gerade gesprochen?

Jochen

Ja, UV-Loop ist halt so eine schnelle, also ist die Python-Version oder Abstraktion ein Wrapper um LibUV und das ist eine super schnelle Abstraktion über die ganzen Betriebssystem-spezifischen Schnittstellen, sowas wie EPOL oder KQ oder was weiß ich nicht, was da sonst so.

Jochen

TCP-Completion-Ports oder

Jochen

IO-Completion-Ports.

Dominik

Ich glaube, das ist mehr

Dominik

Stuff für die Web-Server-Folge, die wir immer machen.

Jochen

Ja, genau, aber auf jeden Fall

Jochen

man kann damit schnell IO machen

Jochen

und das Ganze halt in der

Jochen

Event-Loop und das ist auch das, was unter Node.js

Jochen

zum Beispiel drunter liegt und

Jochen

genau davon gab es jetzt gerade eine neue Version und

Jochen

Async-PG

Jochen

ist halt ein Async

Jochen

Library,

Jochen

um halt auf Postgres zuzugreifen und das

Jochen

ist halt auch sehr praktisch, weil also

Jochen

das normale

Jochen

Psycho-PG, das man so verwendet, kann das

Jochen

halt nicht. Und eigentlich wäre das ja auch

Jochen

saukool, wenn man das Async machen könnte. Und

Jochen

Async-PG ist auch richtig schnell.

Dominik

Ich denke, auf Datenbank stelle ich mich schwierig vor mit Transaktionen

Jochen

und so, weil... Nö, das ist alles...

Jochen

Eigentlich ist das überhaupt kein Problem.

Jochen

Also... Es gibt halt nur

Dominik

einen Warenzustand dann immer und das ist egal.

Jochen

Ja, aber das ist ja okay. Du hast ja auch sonst

Jochen

auch... Du kannst ja schon

Jochen

mehrere Sachen gleichzeitig machen. Nur ist es halt so, dass du

Jochen

normalerweise dann halt warten musst.

Jochen

Du schickst halt irgendwie ein...

Jochen

an die Datenbank und dann blockierst du halt

Jochen

einen Code.

Jochen

Das ändert nicht

Johannes

die Datenbank, Dominik, sondern es ändert nur,

Johannes

wie du die Verbindung der Datenbank hältst.

Johannes

Aber

Johannes

wo wir gerade bei PsychoPG sind,

Johannes

PsychoPG3 ist angekündigt.

Johannes

Die koordinieren sich gerade

Johannes

mit den Django-Leuten,

Johannes

dass die Datenbank-Verbindungen da

Johannes

cooler sind. Die haben zum Beispiel

Johannes

Connection-Pooling im Adapter drin.

Jochen

Das ist auch eine sehr schöne, da hatte ich jetzt letztens

Jochen

so ein Problem tatsächlich auch,

Jochen

dass irgendwie die Connections rausgelegt

Jochen

sind. Bei Django gibt es, glaube ich,

Jochen

im Grunde zwei Arten. Entweder

Jochen

man macht halt eine Verbindung pro Request oder man

Jochen

setzt halt das auf irgendeine Zeit oder so

Jochen

und dann wird die Connection so lange aufgehalten.

Jochen

Aber, und das war mir halt nicht so

Jochen

klar, oder ich dachte, das passiert irgendwie magisch automatisch

Jochen

und das passierte nicht, wenn man ein Thread aufmacht,

Jochen

dann

Jochen

macht das eine zweite Connection auf.

Jochen

Und wenn man sich dann nicht weiter

Jochen

um den Thread kümmert oder wenn der weggeht,

Jochen

dann geht der Thread

Jochen

weg, aber die Connection nicht. Und wenn

Jochen

man das häufig macht, dann ruft

Jochen

irgendwann, dann kriegt man Ärger

Jochen

von dem Datenbank-Admin, weil

Jochen

der sagt, meine ganzen Connections

Jochen

dazu, was zur Hölle macht ihr denn da?

Jochen

Ja.

Jochen

Ups. Ups, genau.

Jochen

Ja.

Jochen

Ja, ja, aber Pooling wäre auf jeden Fall

Jochen

eine schöne Geschichte, weil manchmal ist ja auch

Jochen

eine Verbindung nicht genug und

Jochen

ja. Ja, und generell

Johannes

ist es ja gut, wenn da ein paar Verbindungen

Johannes

offen sind, weil man braucht die halt doch

Johannes

häufig.

Jochen

Ja, ansonsten, was hatte ich noch gelesen?

Jochen

Es gab irgendwie einen Artikel

Jochen

zu Security-Geschichten.

Jochen

Dependency-Conclusion.

Jochen

Ich weiß nicht, ob ihr den auch gelesen habt.

Johannes

Es gab einen Artikel zu...

Jochen

Es gab da schon ein paar Artikel zu, das stimmt.

Jochen

Ja, und das...

Jochen

Dependency-Conclusion. Ja, sehr deprimierendes

Jochen

Problem, ehrlich gesagt. Das musst du gerade erklären.

Jochen

Was ist Dependency Confusion?

Jochen

Ja, da gab es doch so ein, da hat auch eine

Johannes

dreieinhalbtausend Sachen bei PyPy hochgeladen, oder?

Johannes

Ja.

Jochen

Und genau, das ist halt

Jochen

so, oft, wenn da Leute die

Jochen

Version, die sie haben wollen, nicht explizit

Jochen

festlegen, dann

Jochen

muss man halt nur eine Version haben, die ein bisschen

Jochen

höher ist. Oder wenn sie sich

Jochen

vertippen. Oder wenn sie sich vertippen, genau.

Jochen

Dann kann man das sozusagen

Jochen

hijacken und dann kann man den Software

Jochen

installieren, die auch im

Jochen

großen Grenzen das tut, was

Jochen

die erwartet haben, was sie sich installieren

Jochen

wollten, aber halt auch vielleicht ein bisschen mehr oder so.

Jochen

Also

Jochen

ein Beispiel wäre, wenn zum Beispiel jemand eine

Johannes

Bibliothek hochlädt, die Django heißt, nur ohne

Johannes

D vorne dran.

Johannes

Und wenn jemand halt dann Django

Johannes

installiert, das geht auch, hat auch

Johannes

die gleichen Versionen, aber macht

Johannes

halt gleichzeitig, was weiß ich, Bitcoin-Mining oder sonst

Johannes

irgendwas oder Backdoors auf oder

Johannes

sonst irgendwas. Man weiß es nicht genau. Und da gab es eben so

Johannes

einen Vorfall, dass jemand dreieinhalbtausend

Johannes

solche Bibliotheken auf PyPI hochgeladen

Johannes

hat,

Johannes

die sehr suspicious waren und die

Johannes

dann auch wieder gelöscht wurden.

Jochen

Ja, also der Artikel, den ich da gelesen hatte,

Jochen

derjenige, der das gemacht hat, der hat das

Jochen

tatsächlich quasi auch im Auftrag von

Jochen

größeren Firmen gemacht und

Jochen

der hat damit quasi alle großen Firmen aufgemacht.

Jochen

Also, und hat da auch

Jochen

überall irgendwie quasi das... Ja, okay, das

Jochen

habe ich auch gehört. Diese Preisgelder

Jochen

dafür gekriegt, die man halt für...

Jochen

Millionenweise. Ja.

Jochen

Also das war, das hat sich gelohnt.

Jochen

Ja, auf jeden Fall.

Jochen

Und das ist auch wirklich ein fieses Problem

Jochen

und es gibt eigentlich nicht so, es ist

Jochen

so ein bisschen doof. Also Poetry

Dominik

könnte doch da helfen, oder? Wenn ich jetzt irgendwie die Hashes

Dominik

von den Dependencies da mit... Nee, leider nicht.

Dominik

Nee, nein? Nee, hilft nix, weil

Johannes

du ja immer noch den Namen eingeben musst

Johannes

irgendwann. Ja, aber wenn

Dominik

das bei einer Pi-Project-Humil schon gepinnt ist,

Dominik

richtig, dann

Johannes

hoffe ich mal, dass du die richtige

Dominik

gepinnt hast. Beim ersten Mal muss ich

Dominik

auch, wenn ich das eintrage.

Johannes

Ja, und jemand muss aufpassen.

Johannes

Was meinst du mit jemand?

Johannes

Ja, du siehst es ja nicht, du merkst es ja nicht.

Johannes

Das geht ja.

Johannes

Das funktioniert ja, das macht ja genau das, was es soll.

Johannes

Nur halt irgendwann auch noch was anderes.

Johannes

Und wenn du nicht gerade dann drauf guckst,

Johannes

siehst du es nie wieder.

Dominik

Das ist ja immer das Problem mit irgendwelchen Dependencies.

Dominik

Also wenn man irgendwie sich sowas wie PyPy auf den Rechner holt

Dominik

oder Node.js oder was auch immer

Dominik

und irgendwelche Pakete von irgendwo installiert,

Dominik

ohne genau zu wissen, was für ein

Dominik

Toastcode denn da drin steckt oder jedes Mal nachzugucken,

Dominik

ob denn da in der neuen Version

Dominik

vielleicht was Falsches drin ist,

Dominik

dann, ja. Ja, das Problem

Jochen

haben wir an vielen Stellen, das haben wir natürlich auch bei

Jochen

Docker zum Beispiel, wenn man sich da irgendwelche Images zieht, wo man

Jochen

nicht weiß, was da drin ist. Das Problem haben wir auch bei Distributionen,

Jochen

aber jetzt, wenn man jetzt eine Distribution

Jochen

nimmt und man installiert per

Jochen

App irgendwas bei Debian oder so,

Jochen

dann kann man ja davon

Jochen

ausgehen, wenn man jetzt nicht, was natürlich auch viele Leute

Jochen

machen, was natürlich auch wieder so ein Ding ist, wo man sich

Jochen

sagen kann, aus Sicherheitsperspektive

Jochen

ist das ganz übel, wenn man da halt

Jochen

irgendwelche Dritt-Repositories

Jochen

sich reinholt.

Jochen

Die können auch alles installieren.

Jochen

Das ist den meisten Leuten vielleicht auch nicht so ganz klar.

Jochen

Aber wenn man jetzt nur die

Jochen

Debian-Repositories

Jochen

drin hat, dann kann man ja davon ausgehen,

Jochen

okay, das hat irgendeiner, der das maintained,

Jochen

hat sich das angeguckt, hat geguckt, ob das die richtige Software

Jochen

ist, hat daraus ein Paket gebaut,

Jochen

hat das Ganze signiert und so. Und dann kann man sich schon

Jochen

relativ sicher sein, okay, das, was da landet,

Jochen

ist tatsächlich nicht irgendeine Malware

Jochen

oder so. Aber welche Python

Jochen

Version haben die gerade?

Jochen

Genau, das ist

Jochen

das Problem.

Johannes

Und diese ganzen Bibliotheken musst du ja dann

Johannes

auch, du kannst ja dann nicht mit PIP irgendwas installieren,

Johannes

sondern musst ja dann eigentlich. Und ich

Johannes

kenne solche Firmen, ich habe Kunden

Johannes

gehabt, die das gesagt haben, wir wollen

Johannes

keine Dependencies reinholen von

Johannes

irgendwoher, sondern wir wollen die Betriebssystempakete

Johannes

haben und dann hast du echt das Problem. Ja, dann haben die doch

Dominik

keine Software mehr. Viele, viele Sachen.

Dominik

Ja, bist halt bei Django 2.

Dominik

irgendwas. Eins. 2.0.

Dominik

Ja, aber das ist doch Quatsch.

Dominik

dann mache ich doch lieber irgendeinen Server auf, der vielleicht kompromittiert

Dominik

werden kann und mache dann andere Sachen

Dominik

sicher. Mache dann Singles, Point of

Dominik

Truth oder sowas und dann habe ich halt die Daten

Dominik

abgesichert über eine Authentifizierung.

Dominik

Weiß nicht.

Johannes

An irgendeiner Stelle musst du irgendjemandem

Johannes

vertrauen und das ist ein Problem.

Johannes

Und selbst wenn es nur derselbe ist.

Johannes

Und das ist meistens der größte Fehler.

Johannes

Ja, aber zum Thema Sicherheit

Johannes

habe ich auch noch was sehr Interessantes gelernt.

Johannes

Ihr wisst ja sicherlich, alle

Johannes

die zuhören, wissen sicherlich, was Cores ist.

Johannes

C-O-R-S? Cross-Origin

Johannes

Requests

Johannes

Safety? Security?

Johannes

Oh, das ist eine gute Frage.

Johannes

Weiß ich jetzt gar nicht.

Johannes

Ich weiß es auch nicht, aber ich weiß, dass es das gibt.

Johannes

Ich weiß, dass es das gibt und ich weiß, dass

Johannes

das sehr gut ist, weil das bedeutet, dass man nicht einfach

Johannes

irgendwoher Ressourcen abrufen kann.

Johannes

Resource Sharing?

Johannes

Ah, okay. Cross-Origin Resource Sharing.

Johannes

Okay.

Johannes

Das gibt es nicht für WebSockets.

Johannes

WebSockets haben keinen Kurs.

Johannes

wenn ich einen Websocket irgendwo hin aufmache,

Johannes

dann kann ich da drüber alles abrufen.

Johannes

Oh.

Johannes

Und das ist, ja,

Johannes

genau so habe ich auch reagiert.

Jochen

Das war mir jetzt nicht klar. Oh, shit.

Jochen

Aha.

Jochen

Oh.

Jochen

Genau.

Jochen

Also die Annahme ist, dass der

Jochen

Server das macht, dass der den Origin-Header überprüft

Jochen

und das dann halt ablehnt.

Jochen

Aber

Jochen

prinzipiell muss er das nicht.

Johannes

Prinzipiell kannst du eine Verbindung irgendwo hin aufmachen

Johannes

und sagen, ja, ich bin der Websocket

Johannes

von so und so.

Johannes

Und ja. Also das ist doch so

Johannes

eine Sache, wenn das im Header drinstehen müsste,

Dominik

macht dann nicht sowas wie Django Channels

Dominik

sowas in den Headers mit,

Dominik

wie nennt man das? Das weiß ich nicht.

Johannes

Und das ist genau das Problem. Und es ist auch,

Johannes

glaube ich, nicht die Aufgabe von Channels, sondern es

Johannes

wäre eigentlich die Aufgabe von dem

Johannes

terminierenden Webserver. Und auch da

Johannes

weiß ich es nicht.

Johannes

Und weiß ich nicht, ist in der Sicherheitswelt

Johannes

irgendwie wie nein.

Johannes

Das ist, wenn

Jochen

es so ganz überraschend und komisch ist

Jochen

und man es nicht, dann ist es kein gutes

Jochen

Zeichen, nein. Auch da habe ich

Johannes

einen Link gefunden, der

Johannes

das alles erklärt und wie man damit umgeht und so weiter.

Johannes

Damit verlinken wir einfach.

Dominik

Aber ich habe zu Kurs was gelesen in

Dominik

Django REST Framework, weil

Dominik

die nämlich inklusive Sockets das integrieren wollen mit Kurs.

Dominik

Steht zumindest

Dominik

in dem Feature.

Johannes

Ja gut, dann überprüfen die das halt. Das ist ja

Johannes

sehr gut.

Johannes

Was uns

Dominik

zu unserem Topic drückbringen konnte, wenn ihr denn

Dominik

mit den News schon soweit seid. Ja, das ist nicht mehr viel.

Dominik

Es ist noch ein,

Jochen

tatsächlich jetzt, das hatten wir auch schon mal,

Jochen

da waren wir ein bisschen voreilig, irgendwie

Jochen

hatten wir ja schon 30 Jahre Python gefeiert,

Jochen

so der offizielle 30 Jahre

Jochen

Dings, das war irgendwann vorletzte Woche oder so was.

Jochen

Letzte? Ich weiß nicht mehr genau.

Jochen

Also tatsächlich. Da müssen wir jetzt ein Glas Sekt aufmachen.

Jochen

Ja, müsste man jetzt eigentlich. Ja, ist jetzt

Jochen

Python offiziell 30 Jahre draußen.

Jochen

Hurra.

Jochen

Dann ist es ja älter als ich.

Jochen

Ich wollte sagen, genau.

Jochen

Ich hatte mir mein Geld geklaut.

Jochen

Entschuldigung, Dominik.

Jochen

Dann ist es ja älter als Dominik und ich.

Jochen

Ja, es gibt noch ein zweites.

Jochen

Ich habe noch einen Versuch für den Witz.

Jochen

Es gibt ja noch ein zweites Jubiläum.

Jochen

Die Python Software Foundation ist 20 Jahre alt geworden.

Jochen

Und die ist dann ja älter als ich.

Jochen

Okay, verdammt.

Jochen

Das funktioniert nicht beliebig nach unten.

Johannes

Wir nehmen dir alle ab, dass du erst 19 bist, Jochen.

Johannes

Mit ganzen Geschichten, wo du über Computerspiele aus den 90ern erzählst, das ist alles nur, was du gehört hast, was du gelesen hast.

Jochen

Genau, so eine Tarnung.

Dominik

Ja, wenn man letzten Montag in einem Schaltjahr geboren worden wäre, dann hätte man tatsächlich das Problem gehabt, dass man wahrscheinlich in seiner, zumindest der Zahl seiner Geburtstage, die man bisher gehabt hätte, deutlich unter diesen Tagen gewesen wäre.

Johannes

Das ist gut, dass du das so formuliert hast, weil sonst hätte ich jetzt direkt meinen Mathematiker auspacken müssen.

Dominik

Mit welcher Formierung habe ich mich gerettet?

Johannes

Die Zahl der gefeierten Geburtstage,

Johannes

das ist leider,

Johannes

ist meine Goldwaage, sagt ja.

Johannes

Ja.

Johannes

Tja, ja. Ja, gut.

Jochen

Genau, aber dann, ach so, doch, eine Geschichte

Jochen

habe ich noch. Genau, du hattest mir,

Jochen

Johannes, du hattest mir, glaube ich, mal

Jochen

so einen Link geschickt auf so einen Benchmark.

Jochen

Ja, oh.

Jochen

Da arbeiten wir jetzt auch schon eine Weile dran,

Jochen

Jochen. Ja.

Jochen

Und genau, da ging auch über

Jochen

Hacker-News und dann war es

Jochen

irgendwie, war der auch bei Python Bytes drin und so

Jochen

und da ging es darum, da hatte ja

Jochen

jemand irgendwie, weiß nicht genau, was da

Jochen

also da ging es halt um. Jemand hatte etwas

Jochen

gebenchmarked. Jemand hat irgendwas gebenchmarked, genau.

Jochen

Und das Einzige, was ich dazu im Grunde

Jochen

nur anmerken wollte, also

Jochen

also

Jochen

mit so einem

Jochen

Körnchen Salz

Jochen

sollte man da vielleicht schon

Jochen

mit dazu tun, sonst

Dominik

Also du sagst,

Dominik

man müsste das mal selber machen.

Dominik

Das ist das, was ich da raushöre.

Jochen

Genau, also ich meine, ich könnte das ja auch

Jochen

ich könnte das bestimmt fortsetzen, ne? Lügen,

Jochen

dreiste Lügen

Jochen

haben kurz, ne halt, warte

Jochen

Benchmark. Ne, aber ich glaube, das ist

Jochen

das ist mal eine eigene

Jochen

Episode, oder? Wenn wir mal über diesen Benchmark

Johannes

sprechen, den wir jetzt schon seit drei Monaten in der

Jochen

Mache haben. Achso, ja, ja.

Jochen

Der noch keine eindeutigen Ergebnisse gibt. Du meinst, wir wollen

Dominik

beweisen, dass Peißen die schnellste Sprache ist unter der Sonne?

Dominik

Ne, aber vielleicht schnell genug.

Dominik

Wir wollen beweisen, wie die schnellste,

Dominik

wie man damit schnell sein kann.

Dominik

Das ist ein Thema für eine eigene...

Dominik

Ich glaube, da brauchen wir wirklich...

Jochen

Da machen wir eine eigene Geschichte zu.

Jochen

Okay, ich wollte nur sagen, wenn man sich diesen Artikel

Jochen

anguckt, vielleicht nochmal...

Jochen

Also wenn man es wirklich wissen will, muss man es selber messen.

Jochen

Und ja, also es ist nicht

Jochen

so ganz einfach. Also zum Beispiel eben bei dem

Jochen

Artikel, dass man sich es dann so anguckt,

Jochen

wie wenn da so

Jochen

HTTP-Doodles oder

Jochen

bei Scenic ist das dann installiert, bei dem anderen nicht

Jochen

und HTTP-Parsing kann ja dann das Nadelöhr...

Jochen

Also ich will gar nicht

Jochen

gar nicht anfangen davon. Stimmt,

Jochen

da machen wir mal irgendwann, wenn wir Ergebnisse haben.

Jochen

Aber ja,

Jochen

Benchmark ist alles nicht so einfach.

Johannes

Man kann nur so viel verraten. Wir haben extra

Johannes

VMs bei einem Hoster gekauft,

Johannes

um genügend Bandbreite und alles

Johannes

zu haben und wir haben sie bisher nicht gebraucht.

Johannes

Ja.

Johannes

Gut.

Johannes

Ja, ist klar. Gut, dann

Johannes

Geschichte einander mal.

Dominik

Jetzt lacht ihr, Entschuldigung, jetzt müsst ihr mir das erzählen.

Dominik

bin ich sonst die ganze Zeit neugierig.

Dominik

Jochen hat

Johannes

einfach schon sehr viele Dinge ausprobiert und wir haben es

Johannes

bisher nicht geschafft, so viel

Johannes

Bandbreite zu verbrauchen, dass man mehr

Johannes

Bandbreite, also dass wir

Johannes

ein Netzwerk

Johannes

sinnvoll benutzen hätten können.

Dominik

Das war das mit dem Gigabit, was du nicht kriegst

Dominik

ausgelastet.

Dominik

Was war die erste Zahl,

Johannes

Jochen, die du hattest? Was war dein erstes Ergebnis?

Johannes

Wie viele Kilobit hast du?

Johannes

Schon ein paar

Jochen

Megabyte pro Sekunde, aber

Jochen

halt noch... Weit

Jochen

entfernt. Ja, ist noch nicht da, wo es hin

Dominik

muss. Ja, also es geht darum, dass

Dominik

halt die Konkurrenz von Python-Web

Dominik

Applikationen...

Jochen

Nee, also das Ziel dabei ist

Jochen

eigentlich rauszukriegen, braucht man sowas wie

Jochen

ein Nginx eigentlich noch davor oder kann man das nicht einfach

Jochen

alles jetzt wo in der schönen neuen Async-Welt

Jochen

so alle gut... Ich meine, das ist halt irgendwie so eine

Jochen

Tradition geworden, dass man da halt irgendwie

Jochen

fürs File-Serving irgendwie ein Nginx davor hat

Jochen

oder das halt über einen CDN macht.

Jochen

Ja, oder das halt irgendwie von

Jochen

Amazon machen lässt oder so. Das ist halt irgendwie so, dass

Jochen

das macht man halt so. Die Frage ist,

Jochen

gibt es dafür eigentlich jetzt noch so einen Grund,

Jochen

weil tatsächlich kann man ja mit Async

Jochen

und der ganzen Syntax und den ganzen schönen Dingen, die es jetzt

Jochen

alles gibt, also man könnte das ja eigentlich auch selber

Jochen

machen. Die Frage ist halt nur, ist das schnell genug? Ja, also wenn ich

Jochen

jetzt 100 Gigabit saturieren möchte,

Jochen

hm, okay, dann

Jochen

nehme ich vielleicht doch was anderes,

Jochen

aber wenn

Jochen

ich jetzt sowieso eine relativ, wenn ich jetzt

Jochen

sagen wir mal so, nur so ein Gigabit habe oder so an einem Server,

Jochen

dann kann es ja sein, dass es völlig

Jochen

egal ist, ob ich Nginx nehme oder irgendwie

Jochen

Python, weil es ist schnell genug und

Jochen

Gigabit ist ja heutzutage eigentlich gar nicht mehr so wahnsinnig

Jochen

viel. Vielleicht reicht es ja.

Dominik

Und das hört ihr weiter in unserer Webseite.

Jochen

Genau, dann haben wir das ein bisschen

Jochen

angeteasert, aber genau. In der Benchmark-Episode.

Jochen

Ja.

Jochen

Genau. Wir wollten übrigens noch so eine

Dominik

Datentypen-Folge machen. Die haben wir auch noch aufgeschoben.

Dominik

Nur für alle, die sich darüber freuen. Ja, eine Datentypen-Folge.

Dominik

Ja.

Dominik

Ja, okay.

Johannes

Ja, ist eine spannende Sache.

Johannes

Gibt's viele schöne Dinge.

Johannes

Ich hab noch was zum Thema Web-Server.

Johannes

Hab ich kürzlich gefunden. Fly.io.

Johannes

Habe es noch nicht selber ausprobiert, aber

Johannes

das scheint so ein bisschen wie das

Johannes

developerfreundliche

Johannes

Heroku zu sein.

Johannes

Mit einfachem

Johannes

Deployment überall.

Johannes

Wo man

Johannes

quasi einfach Docker-Container hinschickt

Johannes

und die lassen die dann laufen, wo man sie haben

Johannes

möchte. Und das sah sehr gut aus auf

Johannes

den ersten Blick und der hat auch sehr

Johannes

viele schöne technische Artikel

Johannes

geschrieben. Also es hat mir gut

Johannes

gefallen. Ich habe noch keine Gelegenheit gehabt,

Johannes

es auszuprobieren, aber ich werde, habe mir

Johannes

vorgenommen, es auszuprobieren.

Jochen

Ah, sehr cool, weil da gab es nämlich, das habe ich heute

Jochen

irgendwann gehört, glaube ich,

Jochen

auch eine neue Episode vom

Jochen

Django Chat Podcast, wo

Jochen

Peter Baumgartner von

Jochen

Lincoln Group, der auch dieses

Jochen

High-Performance-Django-Buch,

Jochen

der hat das, glaube ich, geschrieben

Jochen

und der hat auch so ein Ding

Jochen

gebaut. Auch so, ich meine, Heroku ist

Jochen

ja auch immer so die Empfehlung für, wenn man sich keine Gedanken

Jochen

machen möchte, aber Heroku ist

Jochen

halt auch... Und viel Geld hat. Und viel Geld hat, ist halt

Jochen

recht teuer. Und es ist halt auch so,

Jochen

dass deren, ja,

Jochen

es ist doch eher so Ruby-and-Rails-Ding und deren

Jochen

Django-Support erfährt jetzt nicht immer

Jochen

unbedingt die Liebe, die man jetzt

Jochen

sich erhoffen würde, vielleicht, von so einem Hoster.

Jochen

Um es mal so

Jochen

vorsichtig zu formulieren. Und

Jochen

der hat dann halt jetzt auch sowas gebaut, nämlich

Jochen

das nennt sich Up-Pack-IO

Jochen

und ist halt auch im Grunde sowas wie

Jochen

Heroku. Also sozusagen, du kannst dein Kram auf

Jochen

AWS hosten, nur halt

Jochen

mehr so auf Django optimiert und so.

Jochen

Aber cool, ja, ist schön zu sehen,

Jochen

dass es da mehr Optionen gibt.

Jochen

Es ist spannend, dass es so viele Firmen

Jochen

im indischen Ozean gibt. Das ist schon sehr cool.

Jochen

IO ist indischer Ozean.

Jochen

Achso.

Jochen

Ja, hat der

Jochen

indische Ozean ausnahmsweise

Jochen

mal was richtig gemacht mit der Wahl

Jochen

des Top-Level-Winners.

Jochen

Ja, Glück gehabt.

Jochen

Glück gehabt.

Jochen

Pack IO, sagst du.

Johannes

Jochen, du abtustenst den Link ja sicherlich.

Jochen

Genau, Up-Pack mit 3P.

Jochen

Das ist ein bisschen schlecht vielleicht,

Jochen

ich weiß nicht genau.

Jochen

Naja, aber genau, ich tue den Link in die Shownotes,

Jochen

kann man sich das angucken.

Dominik

Ja. Jetzt haben wir nur noch

Dominik

Reste übrig, oder? Ja, jetzt haben wir nur noch Reste übrig.

Dominik

Das ist nur noch der Rest. Da müssen wir jetzt über die Reste

Dominik

reden. Ja.

Dominik

Also, wo waren wir eben stehen geblieben,

Dominik

Johannes?

Johannes

Ja, als im Vergleich zu

Johannes

Remote Procedure Call.

Johannes

Weil, also ich meine, Remote Procedure

Johannes

Magical, das ist so die Technologie, die man kennt und das ist so ein bisschen so die Sache, die man halt machen möchte, wenn man sagt, okay, ich habe jetzt hier ein Programm geschrieben und das ist lokal, aber es wäre doch viel cooler, wenn das irgendwo anders laufen würde.

Johannes

Und dann macht man sich halt irgendwie so einen Endpoint, wie auch immer der geartet ist, ja, mit dem Java-XML-RPC, klar, das ist das Erste, was mir jetzt in den Gedanken kommt.

Jochen

Ja, das hatten wir auch. Sprich es ruhig aus, so wie es früher war. Soap zum Beispiel.

Johannes

Ja, das hat man früher einfach so gemacht. Und das ist dann im Wesentlichen halt eine Java-Bibliothek, die man sich einbindet, die Funktionen anbietet, die aber nicht lokal ausgeführt werden, sondern remote.

Johannes

Und das können alle möglichen Funktionen sein. Die können was berechnen oder die können eine Datenbank abrufen oder die können einen Roboter starten oder die können die Kamera oder keine Ahnung, irgendwas können die machen. Und das siehst du denen aber erstmal nicht an, weil die eben so gepackt sind. Eben gerade diese Java XML LPC, die macht dann eine Java-Klasse. Und wenn ich da alle Verbindungsdaten reingegeben habe richtig und mich korrekt verbunden habe, dann funktioniert die wie eine lokale Funktion.

Johannes

Und das ist ja auch so ein bisschen das, was im Namen steckt. Remote Procedure Call heißt einfach, es gibt normale Funktionen, also normale Prozeduren und es gibt Prozeduren, die sind auf einem anderen Rechner. Und das ist das, was man früher gemacht hatte. Und das war ganz, ganz schlimm. Das war ganz, ganz schrecklich.

Johannes

Warum? Weil es hat nicht funktioniert und man wusste nie, was dann das Ergebnis ist und wie lange das dauert. Und man hatte quasi gar keine Garantien über gar nichts. Und diese Interfaces bauen war auch ganz schrecklich. Da musste man dann so eine Webservice.xml haben und die hat auch nur die Hälfte der Zeit funktioniert.

Johannes

und dann gab es Versionierung,

Johannes

wenn dann nicht die richtige Version

Johannes

von dieser API lief.

Johannes

Also es gibt ganz viele Stellen,

Johannes

an denen das einfach zerbricht.

Johannes

Soap ist prinzipiell eine sehr coole Idee,

Johannes

aber praktisch habe ich nie erlebt,

Johannes

dass es angenehm gewesen wäre

Johannes

oder zuverlässig.

Johannes

Und ich denke,

Johannes

also ich weiß es natürlich nicht,

Johannes

ich war nicht dabei,

Johannes

aber ich denke,

Johannes

dass das eben der Grund war,

Johannes

warum man zu REST-APIs

Johannes

ist oder eine der Gründe, warum man zu REST-APIs

Johannes

gegangen ist, wo es eben nicht darum geht,

Johannes

Prozeduren aufzurufen,

Johannes

also wo man nicht sagt, mach

Johannes

irgendwas, sondern wo man

Johannes

im Endeffekt nur sagt, entweder

Johannes

gib mir ein Objekt oder nimm dieses

Johannes

Objekt.

Jochen

Könnte man ja vielleicht auch so formulieren,

Jochen

dass man sagt, man versucht einfach die

Jochen

Dinge, die im HTTP-Protokoll eingebaut sind,

Jochen

auch tatsächlich zu benutzen, so wie sie halt

Jochen

schon da sind und nicht,

Jochen

weil das ist halt eigentlich, glaube ich, auch der

Jochen

Vorwurf sozusagen von REST-Seite, den man

Jochen

an so Sachen wie Soap oder auch

Jochen

Sachen, wo dann andere Leute versucht haben, Korba

Jochen

irgendwie zu retten in die neue

Jochen

Webwelt, macht, dass man sagt, ja,

Jochen

ihr habt hier so ein altes, überholtes

Jochen

Architekturmodell, von dem wie eure

Jochen

verteilte Anwendung funktionieren soll

Jochen

und jetzt versucht ihr das Web

Jochen

dazu zu degradieren, dass das nur ein Transport

Jochen

Layer ist für eure Idee, die

Jochen

auch schon vorher eigentlich nicht funktioniert

Jochen

hat. Also was heißt Korba

Jochen

in die Webwelt?

Jochen

Da gibt es eine schöne Organisation

Jochen

mit dem Kürzel OMG.

Jochen

Oh mein Gott.

Jochen

Common Object Request Broker

Jochen

Architecture. Ja, genau.

Jochen

Und die hat das standardisiert.

Jochen

Das ist die Object Management Group.

Jochen

Und genau.

Jochen

Ich hatte viel Spaß mit Cobra.

Jochen

Schon.

Jochen

Und ja,

Jochen

das war

Jochen

auch alles nicht schön.

Jochen

Das klang

Jochen

alles nach einer guten Idee.

Jochen

Und da hat man es versucht,

Jochen

zu verwenden und dann

Jochen

sind schreckliche Dinge passiert.

Jochen

Ich meine, vielleicht haben Leute das auch verwendet

Jochen

und es war voll cool, aber

Jochen

ich erinnere mich an große Schmerzen.

Jochen

Ja, okay. Und in

Dominik

HTTP selbst ist dann sowas eingebaut

Dominik

wie, gib mir ein Objekt

Dominik

oder bekomme ein Objekt.

Dominik

Genau, HTTP selbst

Dominik

hat ja erstmal

Dominik

nicht so viele verschiedene Dinge, die es

Dominik

garantiert, aber es garantiert

Johannes

im Wesentlichen einen Pfad

Johannes

und ein Verb. Und diese Verben

Johannes

sind sehr

Johannes

streng limitiert. Also prinzipiell kann man da jedes

Johannes

Verb mitschicken, aber der Standard hat nur

Johannes

so eine Handvoll. Und da gibt es insbesondere

Johannes

Get und Post und Get heißt halt

Johannes

gib mir und Post heißt

Johannes

nimm das.

Johannes

Es gibt noch

Johannes

ein, zwei andere, die da wichtig sind. Es gibt noch

Johannes

Put und Delete, die immer wieder

Johannes

notwendig sind.

Johannes

Ja, aber

Johannes

gerade da fängt es dann schon so an. Was ist eigentlich der

Johannes

Unterschied zwischen Put, Post und Patch?

Jochen

Ich weiß es nicht. Ich würde sagen, spontan

Jochen

wäre es so, Put, da updatest

Jochen

du ein komplettes Objekt

Jochen

und Patch nur ein Teil davon. Also wenn du

Jochen

sozusagen nur ein Attribut an einem Objekt änderst,

Jochen

dann machst du das per Patch. Wenn das Objekt

Jochen

eine Version

Jochen

änderst, dann puttest du das komplett.

Jochen

Und Post? Post ist hinzufügen.

Johannes

Ja, aber das ist ja auch nicht so. Das ist ja bei REST

Johannes

auch nochmal anders geregelt. Das ist ja, wenn du auf eine

Johannes

ID postest, puttest, dann

Johannes

ist es ein neues Objekt

Johannes

mit dieser, wenn es die noch nicht gibt, dann ist es

Johannes

ein neues und wenn du auf eine

Jochen

Ja, so ganz klar ist es.

Jochen

Okay, ja, ehrlich

Jochen

gesagt, weiß ich auch nicht genau. Also braucht man nur noch zwei.

Jochen

Get und Post. Ja, das

Jochen

ist halt das, was viele Leute machen. Mit denen kommt man zurecht.

Jochen

Mit denen kommt man schon zurecht, aber das ist

Jochen

natürlich. Delete brauchst du noch, Dominik.

Jochen

Delete brauchst du auf jeden Fall. Na gut.

Dominik

Man kann nicht posten und sagen, das Objekt bitte entfernen.

Dominik

Du kannst,

Dominik

nee, weil du kannst

Dominik

auch, du kannst posten,

Dominik

das kommt jetzt drauf an. Und

Johannes

da fangen schon so ein bisschen die Probleme bei

Johannes

REST an. REST ist, besteht

Johannes

ja aus mehreren Teilen und ein Teil ist

Johannes

eben, benutze nur diese HTTP-Werben.

Johannes

Und

Johannes

da fängt eben

Johannes

das, eins der Probleme schon an,

Johannes

eine der Konventionen ist,

Johannes

wenn du auf

Johannes

den Pfad eines Objektes postest

Johannes

und nur eine gewisse

Johannes

Menge von Attributen mitgibst,

Johannes

dann heißt es, ändere bitte diese Attribute.

Johannes

Wenn du jetzt sagen würdest,

Johannes

wenn ich darauf poste, ohne ein Attribut

Johannes

zu geben, dann kann das, hat es schon zwei

Johannes

Bedeutung. Hat es entweder die Bedeutung, die du jetzt sagst,

Johannes

nämlich lösche dieses Objekt,

Johannes

also entferne alle Attribute,

Johannes

oder es hat die Bedeutung,

Johannes

ändere kein Attribut.

Johannes

Und

Johannes

weil das

Johannes

nicht offensichtlich ist, ist es einfacher,

Johannes

Delete zu nehmen. Delete ist eindeutig

Johannes

und Delete ist auch, Delete ist

Johannes

eine von den Sachen bei REST, die völlig unstrittig sind.

Johannes

Wenn ich eine URL habe, wenn ich einen Pfad

Johannes

habe, der zu einem Objekt gehört und ich mache da Delete

Johannes

drauf und ich darf das und

Johannes

da kommt der richtige Status zurück, dann ist es

Johannes

gelöscht. Das ist völlig unstrittig

Johannes

und das ist auch eine super Sache,

Johannes

weil ab jetzt brauche ich mir ums Löschen

Johannes

von Adre, von Adrecken keine

Johannes

Sorgen mehr machen. Das ist

Johannes

jetzt geregelt. Das geht immer.

Dominik

Was dafür sprechen würde, dass man Post

Jochen

nicht löscht? Nein, eigentlich

Johannes

nicht. Genau, mit Post löscht du nie. Post ist

Johannes

immer nur, Post und Put und Patch

Johannes

sind immer nur Additiv.

Dominik

Okay, also, aber okay, den Unterschied da genau

Dominik

zu verwenden ist wahrscheinlich, wie man gerade schon

Dominik

rausgehört hat, eher

Dominik

vielleicht gar nicht so. Ja, man findet

Jochen

auch ganz viel tatsächlich

Jochen

in freier Wildbahn dann halt Leute, die

Jochen

irgendwie das halt

Jochen

anders machen, als man das vielleicht tun sollte.

Jochen

Ja, und wir werden sicherlich

Johannes

auch hier ganz viele Kommentare kriegen,

Johannes

dass wir alle Idioten sind und dass es nur eine

Johannes

wahre Lösung gibt.

Johannes

Ja, da kommt

Johannes

ein Response zurück, 4.02.

Johannes

Nee, 2.01 kommt dann zurück.

Johannes

2.01 heißt,

Johannes

Objekt erzeugt.

Jochen

Ja, und ich meine, ich sehe immer,

Jochen

wenn ich irgendwie, also es gibt, wenn ich mit

Jochen

anderen APIs rede, ist es ganz oft, dass ich irgendwie

Jochen

was erzeuge und dann kommt halt 200 zurück zum Beispiel.

Jochen

Was halt falsch ist oder...

Jochen

Ja, aber kann auch sein.

Jochen

Kann auch sein.

Jochen

Ja, kann auch sein.

Jochen

Weil 200 bedeutet ja nur

Jochen

okay. 200 bedeutet

Jochen

ja nur in Ordnung. Und

Johannes

es kann ja tatsächlich sein, und ich halte das

Johannes

tatsächlich für sinnvoll, 200 zurückzugeben

Johannes

in vielen Fällen und nicht 201,

Johannes

Weil das Objekt, was erzeugt wurde, ja erstens andere Attribute haben kann, die du nicht mit erzeugt hast, zum Beispiel seine eigene Identität oder Verweise auf irgendwas oder Counts von irgendwas.

Johannes

Und zum anderen kann es ja auch sein, dass nicht alle Attribute angenommen wurden, die du geschickt hast, weil sie halt falsch waren oder weil sie, keine Ahnung, weil du nicht die Berechtigung hast oder sowas.

Johannes

Ja, aber nicht Berechtigung, sondern wieder was anderes.

Johannes

Ah gut.

Johannes

Ja, okay, weil sie halt verworfen wurden. Und dann ist es absolut richtig, meiner Meinung nach, mit 200 das erzeugte Objekt zurückzugeben.

Jochen

Tja, das kommt ja normalerweise auch beim 201, kommt ja auch das erzeugte Objekt zurück.

Jochen

Nee, 201 hat keinen Inhalt.

Jochen

Nein?

Johannes

Nee, 201 hat normalerweise, sollte keinen Inhalt haben.

Jochen

Okay, okay, okay, gut, ja, also es ist, okay, ja.

Jochen

ja. Auch das ist so ein Problem,

Johannes

auch das ist so ein Problem, wenn man auf 201

Johannes

wartet und erwartet, dass das Subjekt

Johannes

zurückgegeben wird,

Johannes

dann kommt ganz oft

Johannes

gar nichts zurück und dann schlägt diese,

Johannes

schlägt quasi diese Abfrage fehl, weil du, weil

Johannes

kein Content kommt.

Johannes

Ach je. Auch das, auch damit

Johannes

habe ich mich schon abgeplagt.

Johannes

Ja, ja.

Dominik

Na gut. Ich verplage mich immer mit dem 402

Dominik

ab.

Dominik

Was war das nochmal? Kein Geld bezahlt?

Dominik

Payment required.

Dominik

Payment required, ja.

Dominik

Reserved for future use.

Dominik

Nee, der wichtigste ist doch 418.

Dominik

Ja, T-Pod war das, oder?

Dominik

Armer T-Pod, ja.

Dominik

Ja, genau.

Dominik

Also ich meine, tatsächlich in der Praxis

Jochen

funktioniert es meistens ja eigentlich ganz gut.

Jochen

Man kann sich da irgendwie durchwurschteln

Jochen

und dann geht es schon.

Jochen

Und genau.

Jochen

Tatsächlich ist aber auch,

Jochen

da gibt es ja so,

Jochen

und dann, wie nennt sich das dann immer,

Jochen

Maturity-Level

Jochen

irgendwie, Rest, also

Jochen

hinter diesem ganzen Kram ist ja

Jochen

so ein Konzept, irgendwie

Jochen

einer der Leute, die halt

Jochen

ja auch so

Jochen

eine der Hauptverantwortlichen

Jochen

hinter dem Web hat,

Jochen

steckt halt auch hinter dieser Rest-

Jochen

Idee, ne, Roy Fielding,

Jochen

hat da seine Dissertation drüber geschrieben,

Jochen

ja genau, 2005 ist sie glaube ich erschienen,

Jochen

und da

Jochen

genau, kann man

Jochen

sich angucken, gibt es online, auch als Webseite.

Jochen

Sehr schön.

Jochen

Oh, auch sehr interessant.

Jochen

Link, please. Ja, genau, Link kommt in die

Jochen

Show Notes. Auch sehr interessant,

Jochen

die Dissertation fängt an

Jochen

und endet jeweils mit einem Zitat

Jochen

von, na, wie heißt er noch?

Jochen

Der Architekt mit den

Jochen

Entwurfsmustern.

Jochen

Mit den Entwurfsmustern.

Jochen

Der mit diesen Patterns

Jochen

angefangen hat, genau.

Jochen

Christopher Alexander, glaube ich.

Jochen

Und genau, naja, also es gibt da interessante Verbindungen und der, also in dieser Dissertation beschreibt er halt sozusagen, was so ein bisschen die Idee hinter dem Ganzen ist und dass eigentlich er sich wünscht, dass halt sozusagen, das hat eine etwas komische Abkürzung, dass sozusagen Hypermedia is the engine of, genau, Moment, wie war das?

Jochen

Hey to us. Hey to us, genau. Application state, genau. Hypermedia is the engine of application state, genau, richtig. Das ist lang und kompliziert und komisch. Und was heißt das, was ist das, was macht das? Naja, das würde ich jetzt auch gerne mal wissen.

Jochen

Wenn man das wirklich genau wissen will, sollte man sich nochmal diese

Jochen

also tatsächlich finde ich das beste

Jochen

Beispiel dafür, wie das funktionieren kann, ist halt

Jochen

das Web. Dass man sagt, also

Jochen

da ist das Hypermedia, was man halt

Jochen

sieht, ist das HTML

Jochen

und

Jochen

du kannst da halt dann Links folgen

Jochen

und

Jochen

siehst dann halt neue Sachen, neue Webseiten

Jochen

und so und kannst dann Dinge

Jochen

machen und sozusagen

Jochen

wie deine Applikation, also deine Webseite

Jochen

aussieht, bestimmt das Hypermedia

Jochen

da drin.

Jochen

Das ist jetzt aber nicht so, wie die meisten Leute Rest-Schnittstellen verwenden, sondern die meisten verwenden das halt zum Beispiel, jetzt weiß ich nicht, was halt viele machen, als Datenlieferant für ihre Single-Page-App. Aber die Single-Page-Apps, die es so gibt, die sind eigentlich so gar nicht Rest. Und die sind auch, was das Hypermedia-Ding angeht, eigentlich ist das auch wieder so ein Ding, was sich aus einer alten Welt rübergerettet hat.

Jochen

Insofern, ich bin mal gespannt, wie es ausgeht.

Jochen

Es kann ja auch sein, dass sich das dann durchsetzt.

Jochen

Aber tatsächlich, also ich finde einen wichtigen Punkt,

Jochen

so bei dem, diese Single-Page-App ist eigentlich voll cool und so.

Jochen

Man kann damit tatsächlich ja Applikationen bauen,

Jochen

die so ein bisschen wirken, als wären sie Desktop-Applikationen,

Jochen

so wie früher.

Jochen

Aber wenn man sich jetzt vorstellt, man will ein Web draus bauen

Jochen

und jetzt hinter jedem Link liegt so eine Single-Page-App,

Jochen

wo erstmal ein paar MB Zeug kommen,

Jochen

dann ist das ja eigentlich gar nicht so gut.

Jochen

Also Stau, Stau, Stau

Jochen

auf der Datenautobahn. Das macht das

Jochen

Web halt irgendwie kaputt. Das macht es halt

Jochen

nicht so, also so eine

Jochen

Single-Page, ja ich meine Single-Page ist eigentlich

Jochen

auch ein falter Name, aber so diese

Jochen

JavaScript-Applikationen, die halt nur

Jochen

RPC quasi zu einem Server machen,

Jochen

die sind halt eine in sich

Jochen

abgeschlossene Applikation. Und wenn man da,

Jochen

wenn alle Webseiten nur noch so etwas wäre,

Jochen

dann würden Links... Also wenn man nicht sehr viel Arbeit

Jochen

macht, meinst du.

Johannes

Weil gute SPAs haben

Johannes

natürlich den internen Zustand,

Johannes

wo du auch Deep Links machen kannst auf SPAs.

Johannes

Aber das ist nicht so gängig, um es mal so zu sagen.

Johannes

Ja, aber was ist jetzt ein Deep Link wieder?

Johannes

Ja, wenn du so eine SPA aufrufst,

Johannes

dann bist du ja jetzt nochmal auf, keine Ahnung,

Johannes

spa.io, ja?

Johannes

Und dann gehst du da in deine Daten rein

Johannes

und in die Tabelle

Johannes

und dann gehst du da in Zelle A17.

Johannes

Und ein Deep Link wäre,

Johannes

wenn es eine Möglichkeit gäbe,

Johannes

eine URL anzugeben, die auf diese

Johannes

Zelle verweist, damit du deinem Kollegen

Johannes

sagen kannst, hier, schau dir mal diese Zelle

Johannes

an. Und

Johannes

ganz viele SPAs machen das aber nicht. Du kannst

Johannes

nicht sozusagen

Johannes

dahin navigieren und dann aus

Johannes

der Adresszeile den Link rauskopieren.

Johannes

Weil die eben,

Johannes

weil du immer noch bei spa.io bist

Johannes

und sonst nirgends, weil der Zustand, den du

Johannes

erreicht hast, nur innerhalb der

Johannes

Anwendung ist und nicht in eben

Johannes

diesem Hypertext. Das heißt,

Johannes

du kannst da nicht drauf verlinken. Und das ist

Johannes

genau das, was sozusagen

Johannes

das Problem an dieser Stelle ist. Du kannst

Johannes

nicht darauf verlinken. Du kannst nicht sagen,

Johannes

das hier und jeder, der

Johannes

es abruft, sieht es dann, wenn er

Johannes

es sehen darf. Immer Modulo

Johannes

dieser Berechtigungen

Johannes

und der Sichtbarkeit und so weiter.

Johannes

Und das ist ja aber eigentlich eine Sache,

Johannes

die in REST APIs

Johannes

schon so drin sein sollte, dass du zum

Johannes

einen Links machen kannst

Johannes

auf Objekte.

Johannes

Also API

Johannes

Slash Spreadsheet

Johannes

Slash

Johannes

Spreadsheet ID Slash Table

Johannes

Slash

Johannes

Slash Row 17

Johannes

Irgendwie sowas, ja?

Johannes

Solltest du prinzipiell machen können und auch

Johannes

innerhalb dieser API solltest du eigentlich

Johannes

nie

Johannes

irgendwie nur IDs angeben, ja?

Johannes

Das ist jetzt dann hier, da ist

Johannes

der Inhalt 23 drin,

Johannes

sondern eigentlich solltest du angeben,

Johannes

da ist der Inhalt drin, der

Johannes

unter folgender URL erreichbar ist.

Johannes

und wenn man das sauber macht,

Johannes

dann ist das eine ganz, ganz mächtige Sache. Ich versuche

Johannes

das bei meinen APIs immer zu machen,

Johannes

weil das die Entwicklung mit der API

Johannes

wesentlich vereinfacht, weil ich eben nicht

Johannes

wissen muss, was das bedeutet,

Johannes

wenn da drin steht ID 17,

Johannes

sondern ich muss

Johannes

nur einen Link aufrufen können und einen Link aufrufen,

Jochen

das geht. Das geht, genau. Dann kriegst du das Objekt

Jochen

und weißt, was da drin ist. Genau.

Jochen

Und dann kannst du auch weitergucken.

Jochen

Ja, aber tatsächlich

Jochen

eben, genau. Und das ist halt so der Unterschied, wenn man

Jochen

jetzt RPC machen würde oder so, wenn du jetzt

Jochen

da irgendein Objekt kriegst mit bestimmten Parametern

Jochen

oder so, kannst du halt auch nicht drauf verlinken.

Jochen

Das ist schon, genau,

Jochen

das ist halt irgendwie so eine der wesentlichen Geschichten,

Jochen

wobei man halt auch sagen muss, also die Idee ist

Jochen

nett und das Web

Jochen

funktioniert ja auch so, aber tatsächlich

Jochen

alle anderen Beispiele, die ich

Jochen

gehört habe oder die versuchen Leute dann zu konstruieren

Jochen

für, wo das noch eine gute Idee wäre,

Jochen

die sind alle ziemlich konstruiert.

Jochen

Also in diesem Webfall hat es einmal

Jochen

geklappt, aber ansonsten

Jochen

also irgendwelche Applikationen,

Jochen

die ihr UI dadurch aufbauen,

Jochen

dass sie irgendwie

Jochen

aus einer API irgendwie ihre Formulare

Jochen

bekommen und das, wo sie, wo sie

Jochen

Ja, das hört sich ja grauenhaft an.

Jochen

Genau, das hört sich schon ziemlich grauenhaft an,

Jochen

ja, das klingt so ein bisschen nach SAP,

Jochen

irgendwie alle Sachen sehen irgendwie gleich aus und so.

Jochen

Ja. Also.

Johannes

Alles zur Laufzeit wird das zusammengebaut.

Jochen

Ja, also ich meine, es wäre natürlich schön, also

Jochen

der Vorteil, den du halt hast, wenn du das so machst, ist halt,

Jochen

dass auch ältere Browser funktionieren können.

Jochen

Du musst halt nicht immer irgendwie

Jochen

den Client austauschen und gerade

Jochen

wenn du jetzt App-Stores hast oder so, wäre es natürlich

Jochen

auch nett, wenn Leute mit alten

Jochen

Client-Anwendungen

Jochen

halt auch deine neue

Jochen

Geschichten benutzen können und du sozusagen

Jochen

so ein bisschen Progressive Enhancement machst

Jochen

und die neuen Geräte können dann halt

Jochen

den neuen Kram machen und die alten sehen aber immer noch

Jochen

die alte Seite sozusagen.

Jochen

Tatsächlich glaube ich aber, dass das praktisch niemand so

Jochen

macht.

Jochen

Das ist auch ungeheuer schwierig,

Jochen

das zu machen, weil die

Johannes

Interna verändern sich ja auch.

Johannes

Also ich meine,

Johannes

wir können auch gerne mal noch ein

Johannes

Stündchen über API-Versionierung sprechen,

Johannes

weil auch da hat nämlich jeder von uns

Johannes

eine Meinung dazu.

Johannes

Und ich weiß auch mindestens drei

Johannes

verschiedene Wege, wie man das machen kann.

Johannes

Aber

Johannes

ja, das

Johannes

ich kenne quasi keinen Fall, wo

Johannes

es sich lohnen würde, verschiedene API-Versionen

Johannes

gleichzeitig laufen zu haben, was

Johannes

ja sehr teuer ist erst mal.

Johannes

Ja.

Johannes

Und deshalb, das mag

Johannes

ein heroisches Ideal sein, aber es ist

Johannes

vielleicht schwierig, das in der echten Welt zu machen.

Jochen

Du müsstest nicht unbedingt

Jochen

unterschiedliche API-Versionen, sondern du würdest es halt

Jochen

so machen wie bei HTML auch. Du würdest halt sagen,

Jochen

okay, hier ist halt ein Attribut und da steht

Jochen

halt an dem Attribut noch dran, weil wenn du das

Jochen

in JSON machst, nicht in HTML, so

Jochen

ab hier nur für Clients mit der Version

Jochen

oder so, keine Ahnung, die anderen müssen hier gar nicht gucken,

Jochen

die können das nicht.

Jochen

Ja, okay, aber dann hast du ja unterschiedliche

Jochen

API-Versionen, die halt additiv sind.

Jochen

Ja, aber du würdest auch dem alten Client das

Jochen

neue ausliefern und der wird das dann einfach ignorieren

Jochen

und er sagt, oh, das ist für mich nicht interessant.

Jochen

Also wie bei HTML ist es ja auch so, genau, wenn du

Jochen

ein neues Tag hast, die Browser ignorieren das einfach,

Jochen

die es nicht können. Ja, oder auch Header generell.

Jochen

Das ist generell eine gute Idee, so

Jochen

additive,

Johannes

nur die Sachen verarbeiten, die man versteht.

Johannes

Also nicht generell, aber in vielen

Johannes

Fällen ist das eine gute Idee,

Johannes

weil man dann eben diese

Johannes

automatische Backwards-Compatibility hat

Johannes

oder automatische Forwards-Compatibility, je nachdem,

Johannes

wie man das sehen möchte.

Jochen

Ja, also irgendwie, also die Idee ist irgendwie voll cool,

Jochen

aber ehrlich gesagt, ich weiß nicht so richtig.

Jochen

Ich bin mal gespannt.

Jochen

Also bei jetzt HTML und Web hat es ja eigentlich mal geklappt,

Jochen

aber ob das, wie sich das so in Zukunft entwickelt, keine Ahnung.

Jochen

Ja, und andere Dinge sozusagen sind auch nicht mehr so richtig gut gealtert,

Jochen

fürchte ich.

Jochen

Also sowas wie zum Beispiel, also eigentlich, das sind schon nette Ideen.

Jochen

Also das HTTP-Stateless ist ja eigentlich cool,

Jochen

es hat diverse coole Vorteile,

Jochen

dass Get halt immer nur

Jochen

irgendwas an Daten liefert und

Jochen

nichts ändert, ist auch super cool, weil das bedeutet halt,

Jochen

du kannst super cashen.

Johannes

Und kannst du auch so oft machen, wie du willst.

Johannes

Kannst du so oft machen, wie du willst, voll gut.

Johannes

Das Problem ist nur, so inzwischen

Jochen

ist halt

Jochen

TLS, HTTPS ist halt

Jochen

überall.

Jochen

Sollte man auch nicht mehr ohne machen.

Jochen

Ja, und zu Recht auch.

Jochen

Ja, genau. Und damit wird das mit der

Jochen

Cachebarkeit und so, das ist halt dann alles so ein bisschen für die Tonne,

Jochen

weil, ja gut, der Browser selber kann es noch cachen,

Jochen

aber so, dass da irgendwo

Jochen

Der Server kann es cachen.

Jochen

Der Server kann es cachen, der Client kann es cachen, aber dazwischen

Jochen

kann es nicht. Ja, alles dazwischen nicht.

Jochen

Und ja, damit

Jochen

hat das nicht mehr so eine riesig große Relevanz

Jochen

und das war ja auch

Jochen

in die,

Jochen

ja, das sieht man jetzt auch heute ja, die ganzen

Jochen

so, ja, Phoenix Live View,

Jochen

bei Ripple & Wells gibt es das,

Jochen

mit Stimulus und

Jochen

diese ganzen Hotwire-Geschichten

Jochen

in anderen Frameworks

Jochen

kommt das jetzt auch irgendwie, dass man wieder HTML

Jochen

über WebSockets schickt oder so.

Jochen

Und einer der Gründe, warum man das anfängt zu machen

Jochen

oder so, ist halt auch, dass es einfach, wenn man

Jochen

sich anguckt, was auf dem

Jochen

auf der

Jochen

Leitung passiert,

Jochen

der totale Wahnsinn ist.

Jochen

Weil es eben, weil HTTP stateless ist,

Jochen

muss da halt immer irgendwie

Jochen

alles mitgeschickt werden, weil

Jochen

naja, ist ja stateless. Ja klar, weißt ja nicht,

Jochen

weißt ja nicht, was der schon hat oder nicht. Genau.

Jochen

Und das

Jochen

das ist eigentlich total ineffizient

Jochen

auch, ehrlich gesagt. Und

Jochen

deswegen gehen halt dann viele Richtung, ja,

Jochen

nehmen wir doch einfach WebSocket oder so, da haben wir

Jochen

dann, das ist halt dann nicht mehr Sadness.

Jochen

Ja.

Jochen

Ja, das ist aber auch so eine der,

Johannes

eine der, jetzt sind wir schon so weit, dass wir

Johannes

über die Nachteile von REST APIs

Johannes

sprechen,

Johannes

dass diese Objekte so ein bisschen in sich

Johannes

geschlossen sind und auch nicht auf den Anwendungsfall

Johannes

eingehen können.

Johannes

Das ist ja eine der Vorteile

Johannes

von RPC, dass du halt sagst, ich möchte, dass

Johannes

folgende Operation passiert und dafür sind

Johannes

die folgenden drei Werte

Johannes

notwendig und dann kriegst du eben die Ergebnisse

Johannes

der Operation und es sind dann genau sieben Werte

Johannes

oder irgendwie sowas. Oder genau diese

Johannes

Subjekte und genau diese Subjekte.

Johannes

Und das hast du jetzt mit REST ja nicht mehr so einfach.

Johannes

Mit REST greifst du ja immer quasi

Johannes

auf ganze Ressourcen zu.

Johannes

Oder eben auf Teil

Johannes

Ressourcen, die dann vom Server

Johannes

auf eine gewisse Art und Weise zur Verfügung gestellt werden,

Johannes

die aber eventuell gar nichts mit

Johannes

deinem Use Case zu tun haben. Also wenn ich

Johannes

jetzt meine gesamte

Johannes

Freundesliste abrufen möchte, dann müsste ich prinzipiell

Johannes

ja alle Links zu meinen

Johannes

Freundesobjekten abrufen und dann allen

Johannes

Links folgen und jedes Freundesobjekt

Johannes

einzeln abrufen,

Johannes

damit ich meine Freundesliste anzeigen

Johannes

kann. Was ja absurd ist, weil meine

Johannes

Freundesliste ist ja einfach nur

Johannes

eine Liste von den Namen der

Johannes

Freunde und fertig.

Johannes

Ja, ja.

Jochen

Ja, ich meine, man würde sich dann halt vielleicht wünschen,

Jochen

eben auch gerade, wenn man dann jetzt unterschiedliche Clients hat,

Jochen

die unterschiedliche Sachen darstellen,

Jochen

dass man als Client kontrollieren kann, was denn dann da kommt

Jochen

und das je nachdem, was man halt braucht.

Jochen

Ja, aber dann hat man im Grunde eben keine Restschnittstelle

Jochen

und dann hält man irgendwie sowas wie eine Datenbank-Schnittstelle.

Jochen

Ja, genau.

Jochen

Und das ist ja auch der Grund, warum es diese Weiterentwicklungen gibt,

Jochen

die du jetzt gleich erklärst.

Jochen

Genau, GraphQL.

Johannes

wo der Client eben kontrollieren kann,

Johannes

welche Attribute geschickt werden

Johannes

und welche Objekte geschickt werden.

Johannes

Weil es eben Use Cases gibt,

Johannes

in denen nicht das ganze Objekt interessant ist

Johannes

und oder sehr viele verschiedene Objekte interessant sind.

Johannes

Ja, nur dann würde,

Jochen

also aus der Sicht eines Restpuristen

Jochen

würde ich jetzt sagen, ja gut,

Jochen

aber das ist ja, da macht der Client ja schon viel zu viel.

Jochen

Das hat dem Client alles nichts anzugehen,

Jochen

das muss alles der Server machen.

Jochen

Das ist ja nicht,

Jochen

da hat der Client viel zu viel State

Jochen

Und das geht ja alles gar nicht.

Jochen

Ja, aber das ist ein bisschen unrealistisch.

Jochen

Gegen Regen argumentieren.

Jochen

Es ist schlecht, dass es den gibt.

Jochen

Und der fällt aus dem Himmel runter und der macht alles nass.

Jochen

Aber es ist halt so.

Jochen

Ja, ja.

Johannes

Es ist nicht schwer, sich vorzustellen,

Johannes

dass es Leute gibt, die ihren Freunden Nachrichten schicken wollen.

Johannes

Sondern schon brauche ich eine Liste der Leute,

Johannes

denen ich Nachrichten schicken kann.

Johannes

Und da hilft mir aller Rest Purismus nichts,

Johannes

weil das müsste dann irgendwie abdecken.

Johannes

Es gibt auch Fälle,

Johannes

sagen wir mal so,

Johannes

um es positiv zu formulieren,

Johannes

für manche Anwendungsfälle

Johannes

braucht es ein bisschen Umdenken

Johannes

von diesem Prozeduraldenken.

Johannes

Wir als Programmierer

Johannes

haben ja oft so ein prozedurales

Johannes

Denken, ja, ich möchte, dass jetzt irgendwas

Johannes

passiert und deshalb schreibe ich

Johannes

diese, rufe ich diese Funktion auf, ja.

Johannes

In Python ist ja im Wesentlichen

Johannes

alles, was man macht, irgendwelche Funktionen

Johannes

aufrufen und innerhalb der Funktionen passiert

Johannes

dann irgendwas anderes.

Johannes

Und das ist jetzt bei REST ganz

Johannes

anders, ja, bei REST sage ich einfach nur,

Johannes

es soll dieses Objekt

Johannes

geben, mehr kann ich ja nicht sagen.

Johannes

Und wenn ich jetzt eben möchte, dass was passiert, zum Beispiel, dass eine Nachricht geschickt wird, ja, dann sage ich nicht, schicke diese Nachricht an, ja, sondern es, sage ich, es soll eine Nachricht geben, die an deren Empfänger, folgender Empfänger ist und deren folgender Text ist und deren Absendedatum gerade jetzt ist.

Johannes

Und das erfordert ein gewisses Umdenken, wenn es eben was inhärent Aktives ist, was passiert. Bei Nachrichten schicken ist es schon, könnte man schon sagen, okay, das ist jetzt nicht was, was passiert, sondern es ist halt ein Eintrag in der Datenbank und ich sage, füge dieses Nachrichtenobjekt hinzu.

Johannes

Aber wenn das irgendwas ist, was steuert,

Johannes

wenn ich eine

Johannes

Schnittstelle habe für irgendwelche Geräte

Johannes

oder für irgendwelche

Johannes

Prozesse,

Johannes

dann finde ich das schon schwieriger

Johannes

zu sagen, es soll jetzt dieses

Johannes

Objekt geben.

Johannes

Ja, ja.

Johannes

Wenn ich ein Licht anmache über eine REST-Schnittstelle,

Johannes

dann heißt das, ich

Johannes

bearbeite das Lichtaktivierungsobjekt

Johannes

und setze das Attribut an

Johannes

auf, ja, anstatt dass ich sage,

Johannes

mach das Licht an.

Jochen

Ja, das ist so ein bisschen, ja.

Jochen

Es erfordert ein gewisses Umdenken.

Jochen

Ja.

Jochen

Ja, ja, ja, ja.

Jochen

Ja, ich überlege gerade, ob man sagen könnte,

Jochen

man erzeugt einfach ein Event oder so, dann, aber.

Johannes

Ja, das ist ja dann auch das, was man sich dann.

Dominik

Ein Kontrollvorgang, dem steht Licht an oder Licht aus.

Johannes

Ja, genau, wo du dann eben sagst,

Johannes

wo man sich so ein bisschen behilft, ja,

Johannes

wo man sich sagt, ich erzeuge jetzt nicht,

Johannes

ich verändere jetzt nicht das Lichtzustandobjekt,

Johannes

sondern ich erzeuge ein Lichtanschalten-Wunschobjekt

Johannes

oder irgendwie sowas, ja.

Johannes

Dass du sozusagen Funktionen als Objekte siehst

Johannes

und dann eben ein neues Funktionsobjekt erzeugst.

Johannes

Aber das ist ja schon ein bisschen beschummelt, oder, Jochen?

Johannes

Fühlst du dich da gut dabei, wenn du sowas machst?

Jochen

Nee, auf der anderen Seite würde ich sagen,

Jochen

ich meine, worauf es hinausläuft,

Jochen

die grundsätzlichen Operationen, die man tun kann, sind halt,

Jochen

das ist mal, ich weiß nicht,

Jochen

das hatten wir bestimmt auch schon ein paar Mal erwähnt oder so,

Jochen

ist halt CRUD.

Jochen

So, create, read, update, delete.

Jochen

Und ich finde es immer wieder erstaunlich,

Jochen

was sich alles darauf mappen lässt, weil tatsächlich ...

Jochen

Ja, alles, du kannst alles darauf mappen.

Jochen

Ja, ja, gut, aber ...

Jochen

Alles, was in dem Computer drin ist, kannst du darauf mappen.

Jochen

Es geht sogar halbwegs elegant.

Jochen

Also oft ist es tatsächlich so,

Jochen

dass es auf den tatsächlichen Anwendungsfall eigentlich ganz gut,

Jochen

also oft passt es einfach ganz gut.

Jochen

Und man ist eigentlich dann zufrieden.

Jochen

Natürlich, in manchen Spezialfällen,

Jochen

da muss man halt dann überlegen und tricksen.

Jochen

weil es dann so nicht einfach geht, ja.

Jochen

Aber prinzipiell, ja, das ist auch immer etwas,

Jochen

was man da auch ...

Jochen

Es gibt schon so Sachen, Jochen,

Johannes

wo ich mir da sehr schwer tue,

Johannes

wo eben was passieren soll,

Johannes

wo mein gedankliches Modell nicht ist,

Johannes

da wird ein Datensatz erzeugt oder bearbeitet,

Johannes

sondern da soll jetzt etwas passieren,

Johannes

da soll jetzt ein ...

Johannes

Ich schicke ein Bild an eine Bilderkennungs-API,

Johannes

dann ist es für mich nicht ...

Johannes

Ich möchte, dass es dieses Bilderkennungsobjekt gibt, sondern dann sage ich im Wesentlichen, ich möchte, dass jetzt dieses Bild ausgeführt wird.

Johannes

Ich möchte, dass jetzt mit diesem Bild irgendwas ausgeführt wird.

Johannes

Und trotz allem, es gibt ja die vorgenannten Puristen, die sagen, alles muss eine REST-Schnittstelle sein und du musst alles 100% RESTful machen,

Johannes

die dann auch so eine Schnittstelle eben als REST-Schnittstelle machen würden, die mir auch meine Schnittstellen oftmals um die Ohren hauen würden,

Johannes

weil ich eben so prozedurale Endpunkte

Johannes

habe, so prozedurale.

Johannes

Ein

Johannes

Funktionsobjekt mit folgenden

Johannes

Parametern wurde angelegt.

Johannes

Ja, das ist natürlich irgendwie,

Jochen

also ja, nee, ich meine, es gibt Dinge, die

Jochen

da nicht so gut reinpassen, wo man dann auch nicht,

Jochen

gerade bei sowas wie, wenn man jetzt Blobs hat, eben

Jochen

Bilder oder sowas,

Jochen

da ist sowieso

Jochen

schwierig da irgendwie, genau.

Jochen

Ist ja auch

Jochen

dann ganz schwierig, das kriegst du ja auch nicht

Jochen

per Get, so, also das

Jochen

natürlich, du kriegst

Jochen

auf jeden Fall nicht mehr bei JSON. Du musst dann halt, wenn du

Jochen

ByteRange pressst, ob du irgendwelche Blobs machst, dann

Jochen

da gibt's... Moment, wenn du über ByteRange

Dominik

denkst, dann irgendwelche Blobs. Also ein Blob ist irgendwie eine Art

Dominik

Datei-Objekt oder sowas. Ja. Also

Jochen

zum Beispiel so was wie eine Podcast-Episode. Ein Binary

Jochen

Large Object. Ja.

Jochen

Also eine Podcast-Episode und du

Jochen

willst jetzt an Minute 30

Jochen

weil, anfangen

Jochen

zu hören, weil da beginnt

Jochen

der interessante Teil über REST.

Jochen

Aber das ist ja tatsächlich

Jochen

bei REST nicht vorgegeben,

Johannes

welche Datenstrukturen du

Johannes

verwendest, sondern ganz im Gegenteil.

Johannes

Jeder Request soll ja immer einen Media-Type haben

Johannes

und dann halt kannst du es in verschiedenen

Dominik

Sachen abrufen. Also REST ist gar nicht

Dominik

nur JSON.

Jochen

Kann auch XML

Jochen

sein, wenn du willst.

Jochen

Hurra!

Johannes

Aber das ist ja eine der Eigenschaften vom Web, dass

Johannes

das Web eben nicht nur JSON

Johannes

übertragen kann, sondern es kann alles übertragen

Johannes

und das soll hier eben auch mit reingehen

Johannes

und das ist auch eine der großen Stärken,

Johannes

die zum Beispiel in Django hat man ja

Johannes

diese wunderbare Bibliothek

Johannes

Django REST Framework.

Johannes

Ich erinnere mich noch, als ich die zum ersten Mal

Johannes

gefunden habe und das war so eine Offenbarung,

Johannes

dass so was geht

Johannes

und dann so schön die Schnellen macht

Johannes

und die einen ganz einfachen Trick

Johannes

verwenden, Browser senden

Johannes

als Media Type

Johannes

oder als Preferred Media Type immer

Johannes

Application HTML mit

Johannes

und so

Johannes

Schnittstellen haben ja normalerweise Application

Johannes

JSON und

Johannes

wenn du aber Application

Johannes

HTML abrufst

Johannes

von dieser mit Django REST Framework

Johannes

erzeugten Schnittstelle, dann kriegst du das

Johannes

Ergebnis als Webseite

Johannes

mit allen Bells und

Johannes

Whistles, die es so gibt, also mit Formularen

Johannes

und mit Login-Anzeige

Johannes

und mit Dokumentation automatisch

Johannes

angezeigt und das ist eine super Sache.

Johannes

Du kannst verschiedene Media Types

Johannes

anfordern. Und auch Juggeress-Framework

Johannes

stellt ja durch diese Serializer, die man

Johannes

normalerweise hat.

Dominik

Das ist wie das Formular, was man sonst so kennt, ja?

Dominik

Genau, der stellt dieses Formular

Johannes

zur Verfügung, der stellt auch den JSON-Datentyp

Johannes

zur Verfügung, also es gibt auch

Johannes

die Möglichkeit, da XML einzustellen. Dann kriegst du halt

Johannes

XML-Objekte, die auf irgendeine Art

Johannes

und Weise formatiert sind. Du kannst auch

Johannes

selber einen schreiben, der halt irgendwas anderes

Johannes

macht. Und das ist auch

Johannes

eine der Stärken. Das bedeutet

Johannes

ja aber nicht, dass jede Antwort auf

Johannes

ein Get immer ein JSON sein muss.

Johannes

Das bedeutet halt nur, dass

Johannes

es Media-Types gibt,

Johannes

die von verschiedenen Branches unterstützt werden

Johannes

und andere werden halt nicht unterstützt. Und gerade

Johannes

bei so einem Blob-Objekt wäre es halt dann

Johannes

ja, Application

Dominik

irgendwie ein binäres Name. Binary.

Jochen

Weiß ich nicht. Octet. Octet-Stream.

Jochen

Ja.

Jochen

Ja, ja, ja. Nee, stimmt schon. Also insofern

Jochen

würde das da auch reinpassen. Ja.

Dominik

Ganz kurz nochmal. Octet-Stream. Was ist das denn?

Dominik

Ja, Octet ist ein cooler,

Dominik

ist der coolere Name für Byte.

Dominik

Also es sind einfach

Dominik

Binärdaten, die übertragen werden.

Dominik

Also zwei hoch...

Dominik

Das ist so der Fallback-Type.

Dominik

Wenn ich nicht weiß, was es ist,

Dominik

dann sind es halt irgendwie Binärdaten.

Johannes

Und das heißt halt als Mime-Typ oder als Datentyp

Johannes

heißt es Application-slash-Octet-Stream.

Johannes

Heißt einfach nur

Johannes

irgendwelche Daten, keine Ahnung.

Johannes

Okay, Octet-Stream.

Dominik

Auch gerade, wie er zum ersten Mal drüber gestolpert hat, das ist ja Wahnsinn.

Dominik

Wie lange macht er das eigentlich schon? Ich weiß es nicht.

Dominik

Zu lange.

Dominik

Also ja, okay, dein REST-Framework haben wir jetzt gerade, dann sind wir ja schon wieder bei Python angekommen. Wir hatten aber die Methoden gerade alle so einmal durch, hatten wir alle? Also Options gibt es glaube ich noch, was ist das denn? Geht das auch REST oder?

Johannes

Options ist wie Get nur ohne Inhalt. Das ist nur, wenn man sozusagen die Header abrufen möchte, um zum Beispiel die Datentypen rauszufinden oder die verfügbaren Datentypen rauszufinden.

Dominik

Ja, das heißt, man kann quasi nach Options fragen und dann bekommt man alle Optionen, die Datentypen bereichern.

Johannes

Genau, das ist so wie ein Get, das ist genauso wie ein Get, nur dass der den Inhalt nicht mitschickt. Das wäre zum Beispiel, wenn der Jochen jetzt seine Podcast-Episode abrufen möchte und weiß, dass das eine Zwei-Stunden-Episode ist, also eine von den kurzen, dann …

Johannes

Geradezu mickrig, kurzen.

Johannes

Meine Frau hat sich vorhin drüber lustig gemacht,

Johannes

dass wir immer so lange eine Episode aufnehmen.

Johannes

Aber ich habe gesagt, das ist halt so.

Johannes

Dann möchte ich eben nicht

Johannes

die gesamte,

Johannes

möchte ich nicht diese ganze

Johannes

Episode auf einmal abrufen, sondern ich möchte erst mal

Johannes

sehen, ob ich die überhaupt verwenden kann.

Johannes

Und dann schicke ich da einen Options-Request hin

Johannes

und dann sagt mir der Server halt, ja, der hat so und so

Johannes

viel Bytes und

Johannes

der Content-Type ist so und so.

Johannes

Und dann kann ich sozusagen

Johannes

ausprobieren, ob die

Johannes

ob diese Anfrage sinnvoll ist.

Johannes

Ja, okay.

Johannes

Interessant.

Johannes

Aber um jetzt wieder zu

Dominik

REST-APIs zurückzukommen in Python.

Dominik

Also Django REST Framework haben wir gerade erwähnt,

Dominik

also da wir alle gerne Django machen,

Dominik

ist das glaube ich einer der Ways to go.

Jochen

Das ist tatsächlich auch ziemlich großartig, da habe ich auch viel.

Jochen

Das ist auch so ein Ding,

Jochen

ich weiß nicht, ich glaube, das ist auch so ein

Jochen

wiederkehrendes Thema, das habe ich jetzt auch

Jochen

von anderen schon gehört

Jochen

und das war bei mir so und

Jochen

vielleicht auch bei anderen noch.

Jochen

Also oft sind so die ersten

Jochen

gut funktionierenden Projekte

Jochen

irgendwas mit Jungle-Rest-Framework bei vielen Leuten

Jochen

gewesen. Ich weiß nicht so genau, woran

Jochen

das liegt, aber tatsächlich würde ich jetzt mal so

Jochen

okay, keine Ahnung, also ich habe ja

Jochen

Wirtschaft,

Jochen

mag daran liegen, dass es super ist, aber auch,

Jochen

dass es halt einfach, dass man da

Jochen

dann anfängt, in einem etwas interessanteren

Jochen

Markt zu sein, weil das,

Jochen

was man sonst so sieht, also

Jochen

naja, wenn du

Jochen

irgendwie, keine Ahnung, also das, was halt so

Jochen

gibt es ja viele, viele, die

Jochen

Wordpress-Seiten machen oder so, keine Ahnung,

Jochen

Zeugs. Und da

Jochen

bist du halt in einem sehr

Jochen

unglücklichen Quadranten aus meiner Perspektive.

Jochen

Das ist halt irgendwie low budget.

Jochen

Die Kunden sind

Jochen

üblicherweise nicht bereit, da so wahnsinnig viel Geld für

Jochen

auszugeben, weil es gibt so wahnsinnig...

Jochen

Es war früher ein besserer Markt. Ja, kann auch sein, dass

Jochen

es mal gut war, aber ich glaube, mittlerweile ist es nicht mehr so richtig

Jochen

toll. Dann ist es auch low value,

Jochen

weil irgendwie es ist

Jochen

einfach nicht so geil. Es ist meistens

Jochen

irgendwelche, naja,

Jochen

doch eher so technisch herausgeforderte

Jochen

Hoster. Das kommt dann über die Add-ons,

Jochen

glaube ich, wenn du dann noch ein Magento

Jochen

dran machen kannst, dann bist du wieder. Genau,

Jochen

dann kannst du natürlich irgendwie so lange Plugins

Jochen

installieren, bis es dann vielleicht doch funktioniert.

Jochen

Das Problem dabei ist, dann bist du aber auch bei

Jochen

einem anderen unangenehmen

Jochen

Attribut, nämlich ist es dann kompliziert

Jochen

und schwierig, das irgendwie richtig hinzukriegen.

Jochen

Das heißt, es ist schlecht bezahlt,

Jochen

du kriegst nicht so viel richtig Wert

Jochen

hin und es ist auch noch

Jochen

schwierig. Das ist einfach ein unangenehmer

Jochen

Ort. Während,

Jochen

würde ich jetzt mal so sagen,

Jochen

wenn du halt

Jochen

dann sowas machst wie die Django REST Framework oder so,

Jochen

da ist plötzlich

Jochen

richtig Wert drin, wenn da

Jochen

irgendwie die Apps von Leuten richtig gut

Jochen

funktionieren,

Jochen

da suchen Leute

Jochen

händeringend, da sind dann die Preise irgendwie anders

Jochen

und es generiert

Jochen

halt auch irgendwie ordentlich mehr Wert,

Jochen

wenn das halt gut funktioniert und man ein

Jochen

nettes Interface hat, wo man die API

Jochen

sich angucken kann und so.

Jochen

Und ja, das funktioniert dann

Jochen

plötzlich irgendwie, würde ich mal so

Jochen

sagen.

Jochen

Ja, mit Django ist das

Dominik

echt tatsächlich ganz nett. Also ich habe mal so ein bisschen

Dominik

geguckt, was tatsächlich in der Zukunft noch

Dominik

so geplant ist. Und da stehen

Dominik

tatsächlich relativ nette Dinge drin. Zum Beispiel

Dominik

Realtime-API-Support

Dominik

using Websockets.

Dominik

Ja, dann mit Django-Channels

Dominik

in Zusammenhang.

Dominik

Better Authentication by Default, also die wollen

Dominik

vielleicht sogar Jot und

Dominik

Core-Support in das Core-Package reinbringen,

Dominik

wo wir ja eben schon kurz sprachen.

Dominik

Das klingt doch ganz interessant.

Dominik

Was war das?

Dominik

Django REST Framework.

Dominik

Dominik, erzähl mal,

Dominik

ich habe gleich noch eine

Dominik

kleine Randnotiz.

Dominik

Was war das für eine Authentifizierung?

Dominik

Jot JWT.

Dominik

Ah, echt?

Dominik

Ja, das ist Java JSON Web Tokens.

Dominik

JSON Web Tokens?

Dominik

Aber da gibt es ja Bibliotheken.

Johannes

Also ich meine, das ist ja nur ein PIP-Installed entfernt.

Dominik

Ja, aber da gibt es ja verschiedene nicht so gute Varianten.

Dominik

Die sind alle so ein bisschen ...

Jochen

Ja, aber das Problem ist halt irgendwie,

Jochen

dass der Standard wohl nicht okay ist.

Jochen

Und dann ist es halt schwierig, dass ...

Jochen

Ja, aber die Frage ist, warum der Standard nicht okay ist.

Jochen

Wenn ich das richtig verstanden habe,

Jochen

weil es verschiedene Möglichkeiten gibt,

Dominik

diese Schlüssel zu erzeugen oder überhaupt diese Token zu erzeugen.

Johannes

Weil es so viele Konfigurationen gibt.

Jochen

Weil du sozusagen so Downgrade-Angriffe machen kannst.

Jochen

Du kannst dem Server sagen,

Jochen

ja, schön, dass du diese ganzen sicheren Methoden hast.

Jochen

Ich bin ein kleiner, dummer Client.

Jochen

Ich kann das leider alles nicht.

Jochen

Ich unterstütze die alle nicht.

Jochen

Ich unterstütze nur etwas, was halt im Standard definiert ist,

Jochen

was aber super unsicher ist.

Jochen

Und dann nutze ich aus, dass es unsicher ist.

Jochen

Und das ist natürlich Kacke, wenn das im Standard steht.

Jochen

Das kannst du machen.

Jochen

Ja, also das ist halt ...

Johannes

Du musst dann deinen Server so konfigurieren,

Johannes

dass der die Sachen nicht annimmt.

Johannes

Aber es ist relativ schwierig, herauszufinden,

Johannes

was jetzt gerade alles schon unsicher ist.

Dominik

Also das heißt, es geht darum, welche Algorithmen

Dominik

der nehmen kann zum Bereitstellen dieser Token,

Dominik

dass man den nicht zurückrechnen kann.

Dominik

Ja, zum einen das

Dominik

und zum anderen auch die Token Art.

Johannes

Es gibt ja signierte Token und unsignierte Token

Johannes

und wenn der Kleinteil sagt, ich kann nur

Johannes

die unsignierten.

Johannes

Und der Server ist so eingestellt, dass er auch die unsignierten

Johannes

annimmt, dann nimmt er halt auch die unsignierten an.

Dominik

Und dann irgendwie so einen kleinen Verschlüsselungsalgorithmus nimmt,

Dominik

den man in der Rainbow Table nachgucken kann oder sowas.

Dominik

Ja, oder halt auch gar keinen.

Johannes

Wenn du sagst, naja, Verschlüsselung, naja, kann ich nicht.

Johannes

Das ist eben wirklich so

Johannes

die Frage,

Johannes

was ist jetzt gerade der aktuelle

Johannes

Zustand der Sicherheit? Und eigentlich müsste man sich da

Johannes

sehr gut drum kümmern.

Jochen

Und also ich weiß

Jochen

nur mal, so ganz im Detail kann ich es nicht. Ich weiß nur,

Jochen

dass Leute immer sagen, oh mein Gott, das ist alles schrecklich.

Jochen

Und JVT, also

Jochen

von ihm, gab es

Jochen

irgendwie einen Post auf der Django-Mailing-Liste

Jochen

von James Bennett, glaube ich, wo der mehr oder

Jochen

weniger klipp und klar gesagt hat, JVT werden wir

Jochen

in Django niemals machen. Das ist irgendwie...

Jochen

Jott?

Jochen

Was ist das?

Jochen

Ich glaube, man sagt Jot.

Johannes

Dominik, du bist der Einzige, der Jot sagt.

Dominik

Ich habe das im Blogpost gelesen von

Dominik

Toni, der das schrieb.

Jochen

Vielleicht ist das richtig, ich weiß es nicht.

Jochen

Schöne Grüße.

Jochen

Ich sage immer Jason Webtoon.

Jochen

Ich sage immer Jason Webtoon.

Jochen

Genau, jedenfalls

Jochen

ist da die Ansage so,

Jochen

das Protokoll ist scheiße, das machen wir nicht.

Jochen

Was ist denn die Alternative?

Jochen

Jochen. Genau, das ist halt die

Jochen

offizielle Alternative, sozusagen

Jochen

jedenfalls, so wie es

Jochen

in dem offiziellen Django

Jochen

Podcast, Django Chat von

Jochen

Carlton Gibson, einem der offiziellen

Jochen

Django-Maintenner.

Johannes

Der übrigens ein total netter Kerl ist.

Johannes

Der ist total nett, ja.

Johannes

Sometimes pronounced Jot, sagt Wikipedia.

Johannes

Sometimes pronounced.

Jochen

Sometimes pronounced. Ich versuche es dann mal

Jochen

jedes dritte Mal zu machen.

Jochen

Genau, der sagt halt.

Jochen

hier im Rheinland sagt man doch JWT.

Jochen

JWT, JWT.

Jochen

Egal, ja.

Jochen

Es ist noch immer

Jochen

Jotje-Jange oder so, ne?

Johannes

Es gibt doch so andere Token-Typen auch noch,

Johannes

oder? Ich vergesse nicht, wie die heißen.

Jochen

Paseto zum Beispiel. Paseto,

Johannes

genau, danke. Aber das ist ja genau das Gleiche.

Dominik

Aber du wolltest gerade irgendwas aus dem Django-Tet-Talk erzählen.

Dominik

Genau, genau. Also da

Jochen

war halt sozusagen die Ansage, na,

Jochen

nimm doch einfach die normale Session-Authentication.

Jochen

Die ist halt so ein bisschen

Jochen

unkomfortabel und so, aber

Johannes

auch nicht so arg, ganz ehrlich.

Johannes

Ja, so arg unkomfortabel.

Dominik

Ja, aber wenn man doch, also, ja, wenn man

Dominik

irgendwie kann, das, was man in Python

Dominik

macht, kann die Dot-Bibliothek nicht einfach sagen,

Dominik

nee, ich bin nicht downgradebar, also ist das nicht

Dominik

da schon mit drin? Also das muss ja dann,

Dominik

ja doch, kannst du schon,

Jochen

aber das Problem ist, du weißt ja nicht,

Jochen

mit welchen Clients du redest. Ja, aber wenn

Dominik

der Client das gar nicht sagen kann, weil meine Bibliothek das gar

Dominik

nicht zulässt, dann. Ja, dann bist du inkompatibel.

Dominik

Dann sagen die Clients,

Jochen

mit der API kann ich nicht reden, kaputt.

Jochen

Ja, gut, kann ja sein.

Dominik

Aber den kleinen, den kann ich ja quasi selber sagen.

Dominik

Kannst du machen, Dominik.

Dominik

Kannst du machen.

Dominik

Dann kann man es mit Job machen.

Dominik

Dann kann man dabei bleiben, da muss man nicht sagen, oh nein.

Dominik

Ja, aber wenn ich den kleinen selber ausliefer,

Dominik

also das JavaScript beispielsweise,

Dominik

was dann mit meinem Backend reden soll

Dominik

und ich selber bestimmen kann, was da drin steht,

Dominik

dann kann doch nicht einfach irgendwer sagen,

Dominik

dass er jetzt einen anderen Standard dafür nehmen will.

Johannes

Dann kannst du aber auch die Session-Authentifizierung nehmen,

Johannes

weil da hast du ja nicht viel gewonnen.

Johannes

Außer, dass du jetzt selber immer die Authentifizierung

Johannes

in jeden Request reintun musst, weil der Browser das

Dominik

nicht automatisch macht. Ja, aber bei Session

Dominik

habe ich ja noch andere Probleme, glaube ich.

Dominik

Ja.

Dominik

Ja.

Dominik

Dann kann ja jemand so tun, dass wer meine Session

Dominik

klauen will oder sowas und dann

Dominik

Ja, kann er machen, aber

Dominik

das verhindert der Browser.

Dominik

Ja, aber ja, egal.

Dominik

Es ist kompliziert.

Jochen

Das mit der Authentifizierung ist auch noch nicht so richtig abschließend.

Jochen

Ich bin überrascht

Jochen

immer, ich habe mich da schon ein paar Mal Gedanken

Jochen

gemacht und ich war immer überrascht,

Jochen

dass es da keine einfache fertige Antwort gibt.

Jochen

Wie wenig gelöst es ist.

Jochen

Sondern, dass man immer denkt so,

Jochen

oh, ich habe die Antwort gefunden

Jochen

und dann irgendwie ein paar Monate, Jahre später

Jochen

kommt einer um die Ecke und sagt,

Jochen

was machst du denn da?

Jochen

Das ist doch totaler Quatsch.

Jochen

Das machen wir schon seit Jahren nicht mehr.

Jochen

Seit Jahren machen wir das nicht mehr.

Jochen

Genau.

Jochen

Und dann denkt man sich immer so,

Jochen

oh, okay.

Jochen

Ich glaube, ich brauche Hilfe.

Jochen

Okay, Authentifizierung über REST.

Jochen

Es ist erstaunlich ungelöst.

Jochen

Es ist erstaunlich ungelöst.

Jochen

Ja, REST ist ja erst mal

Jochen

keine, ist ja erst mal nur eine ganz normale

Johannes

HTTP-Webseite. Also du kannst Authentifizierung

Johannes

machen mit allen Mechanismen, die du da

Johannes

oder halt auch nicht. Ich meine,

Johannes

wir haben auch, wir haben früher alle die Webseiten

Johannes

gesehen, die die PHP-Session-It

Johannes

die die PHP-Session-It

Johannes

als Get-Parameter drin hatten und

Johannes

ja, durfte man halt nicht

Johannes

kopieren.

Dominik

Dann durfte man halt die Links nicht verschicken, ne?

Dominik

Ja.

Dominik

Ja, wie macht man denn sonst noch

Dominik

Rest-APIs mit Python.

Dominik

Genau, also ja,

Jochen

General REST-Fanwork, schöne Sache.

Jochen

Ich glaube,

Jochen

in der Flask, ich weiß jetzt wahnsinnig

Jochen

gar nicht mehr, wie man das ausspricht, vielleicht spricht man das auch J aus.

Jochen

Nein, Flask.

Jochen

Ich weiß es nicht genau.

Jochen

Ich spreche alle Sachen immer falsch aus.

Jochen

Flaske, Jochen.

Jochen

Flaske.

Jochen

Jaisson.

Jochen

Jaisson, ja, oui.

Jochen

Genau, da verwendet man eher Marshmallow,

Jochen

Das gibt es auch für Django,

Jochen

aber da verwenden wir es

Jochen

in Django Rest Framework.

Jochen

Ist so ähnlich.

Jochen

Was ist das jetzt wieder? Marshmallow?

Jochen

Das ist auch eine Bibliothek, so ähnlich wie Django Rest Framework,

Jochen

aber im Grunde, ja. Endpunkte.

Jochen

Benutzt man denn noch Flask, Jochen?

Jochen

Ja, aber genau, da wäre Hot Take.

Jochen

Ich würde ja sagen,

Jochen

so,

Jochen

jetzt habe ich ja etwas ganz Gemeines.

Jochen

Oh, oh, Jochen,

Jochen

jetzt machst du die Tore

Jochen

für Flameworks auf.

Jochen

Der einzige Grund, Flask noch zu

Jochen

verwenden, ist ja so im Grunde, aus meiner Perspektive,

Jochen

ich kenne mich auch nicht wirklich mit Flask aus, aber

Jochen

wenn man alte Python-Versionen hat,

Jochen

weil, ja, das geht

Jochen

mit Flask und vielleicht mit anderen Sachen nicht.

Jochen

Aber wenn man jetzt

Jochen

größer Python 3.6 unterwegs ist, warum

Jochen

Flask? Warum nimmt man dann nicht sowas wie FastAPI?

Jochen

Also, Meinung

Jochen

Weil ich dir so eine API schreiben will.

Dominik

Hallo at PythonPodcast.de, da könnt ihr gerne

Dominik

eure Kommentare oder ein paar Aspray

Dominik

an uns kommentieren,

Dominik

jederzeit erwünscht hinterlassen. Machen wir

Johannes

mal so eine Episode, wo wir die vorlesen einfach.

Johannes

Die Mail? Ja, das Problem

Jochen

ist, die ist dann aber keine zwei Stunden

Jochen

lang.

Jochen

Ja, außerdem wollen wir ja nicht,

Dominik

ja, es sind ja immer viele nette Nachrichten,

Dominik

da freuen wir uns immer. Es gibt ein sehr

Johannes

schönes Buch von einem Science-Fiction-

Johannes

Autoren, das heißt Your Hate Mail Will Be

Johannes

Graded, wo er

Johannes

einfach Post,

Johannes

Fanpost, sagen wir es mal in Anführungszeichen,

Johannes

die an ihn geschickt

Johannes

würde, diskutiert.

Johannes

Hm, ja.

Johannes

Und sowas,

Johannes

Jochen, du wirst jetzt sicherlich,

Johannes

ihr werdet jetzt, jetzt wo du das gesagt hast,

Johannes

das Flask, das umfasst

Johannes

ja auch alle anderen alternativen

Johannes

APIs, alle

Johannes

anderen alternativen Systeme.

Johannes

CherryPi, Pyramid,

Jochen

Ripos, Soap.

Jochen

Gab ja eine neue

Jochen

Version, Pyramid 2.0, voll gut.

Jochen

Nee, ich weiß es ehrlich gesagt gar nicht so

Jochen

genau, was FastPyramid, ich weiß, die gibt es

Jochen

alle und so.

Jochen

Manche davon können bestimmt auch voll coole Sachen.

Jochen

Bei Soap, ja.

Jochen

Ja, das

Jochen

war mal voll groß und so, aber

Jochen

ja, vielleicht ist es auch voll cool.

Jochen

Es gibt noch Bottle oder sowas, ist das nicht auch?

Jochen

Das ist super. Ja, Bottle, ja. Bottle gibt's.

Jochen

Es ist super klein.

Jochen

Ja, das ist kleiner

Johannes

als Flask, deshalb heißt es ja so.

Johannes

Ja.

Johannes

Aber ich meine,

Jochen

tatsächlich FastAPI würde ich jetzt aus meiner

Jochen

Perspektive, es macht im Grunde das, was Fast macht.

Dominik

Mehr oder weniger. Hat auch, also ich weiß

Dominik

jetzt nicht im Vergleich zu Fast, aber hat mehr Stars bei GitHub.

Dominik

Auf jeden Fall als Bottle. Na, super.

Dominik

Ja, aber das ist doch,

Johannes

also Fast-API ist doch wirklich nur

Johannes

für APIs gedacht, oder? Nee,

Jochen

du kannst, also ich hab damit auch schon Webseiten, du kannst,

Jochen

das Problem, also ja, ist gedacht,

Jochen

aber es geht auch anders. Du kannst da einfach

Jochen

Ginger-2-Templates verwenden

Jochen

und die Dinger ausliefern, gar kein Problem geht.

Jochen

Und

Jochen

genau, du musst halt alles... Starlet?

Jochen

Genau, Starlet ist halt sozusagen das

Jochen

Ding da drunter.

Jochen

Die Werbung ist on par

Jochen

mit Node.js and Go.

Jochen

Ja.

Jochen

Ja, das besprechen wir

Jochen

in der Benchmark.

Jochen

War das wieder ein

Jochen

Benchmark, der legal war?

Jochen

Aber du hast halt, aber ja, ich meine, ich mache

Jochen

in letzter Zeit schon auch so Dinge mit

Jochen

FastAPI und ich finde das super.

Jochen

Ich finde gerade

Jochen

auch

Jochen

die Integration mit Pydentic echt

Jochen

nett und

Jochen

gut für Daten.

Johannes

Alle Leute, die sich damit nicht abfinden wollen, können auch

Johannes

bitte an

Johannes

welche Willadresse schreiben.

Johannes

Hallo, at pythonpodcast.de

Jochen

Def0, at fein.

Jochen

Aber ich finde, die Syntax ist halt besser.

Jochen

Du hast halt da, das ist halt

Jochen

nativ Async, direkt alles.

Jochen

Die ganzen Geschichten

Jochen

sind halt,

Jochen

du könntest ja auch quasi in

Jochen

Django oder halt in den Serializern Sachen

Jochen

mit Type-Annotationen halt sozusagen

Jochen

da die Typen festlegen oder so.

Jochen

Geht nur nicht, weil das ist halt älter als

Jochen

Type-Annotationen, deswegen musste man sich da schon was anderes

Jochen

überlegen, ja, in Django mit den Descriptoren.

Jochen

Aber

Jochen

in FastAPI ist er halt erst ab Python 3.6,

Jochen

das heißt, da kann man das halt so machen und dann hat man halt

Jochen

das in relativ

Jochen

eleganter Syntax ausgedrückt, wo man sonst

Jochen

eine Menge schreiben muss.

Jochen

Ob es jetzt so schlimm ist, weiß ich auch nicht,

Jochen

aber es ist auf jeden Fall irgendwie so ein bisschen erfrischend

Jochen

und was man halt auch geschenkt kriegt, ist

Jochen

das sind wir auch schon eher beim Restthema,

Jochen

ein Frontend,

Jochen

das aber nicht so wie bei Django REST

Jochen

Framework so ein eingebautes, gerendertes

Jochen

Ding ist, sondern das ist halt sozusagen

Jochen

Swagger oder halt

Jochen

OpenAPI heißt das jetzt irgendwie,

Jochen

dass

Jochen

sich aus dem Schema

Jochen

quasi das Frontend generiert.

Jochen

Es ist halt quasi komplett JavaScript, aber

Jochen

dem sagt man halt hier, so ist das Schema, dann

Jochen

macht es halt ein Frontend dazu, das tatsächlich

Jochen

auch so ähnlich ist wie jetzt bei

Jochen

Jungle-Rest-Framework.

Jochen

Und das funktioniert eigentlich sehr gut.

Dominik

Sieht echt gut aus und ist übrigens auch von Sebastian Ramirez,

Dominik

der auch Typer gemacht hat.

Dominik

Den hatten wir auch schon mal kurz ein, zwei Mal erwähnt.

Dominik

Das sind schon interessante Sachen.

Johannes

Da gab es doch noch was von dem einen, der Jungle-Rest-Framework

Johannes

gemacht hat. Wie hieß es denn gleich noch?

Johannes

Ja, das ist ja

Jochen

Tom, na, wer heißt

Jochen

er noch? Christy.

Jochen

Tom Christy, genau.

Jochen

Der hat auch

Jochen

Starlet gemacht.

Jochen

Ah, ist das Starlet?

Jochen

Ja, ja. Und wie hieß, wie hieß

Johannes

dieses, das hieß Star API oder irgendwie sowas?

Johannes

Fast API, meinst du, oder?

Johannes

Nee, dieser Standard,

Johannes

den er da sich ausgedacht hat. Ach, ich weiß es nicht mehr.

Jochen

Ach ja, das gab's auch. Er hat

Jochen

auch ein API-Ding gemacht.

Jochen

Ja, ja, aber, ja, ob das...

Jochen

Das war nur sehr kurzlebig, oder?

Jochen

Ja, also jedenfalls habe ich davon dann irgendwann

Jochen

nichts mehr gehört. Es war auch eine coole, da waren auch coole Ideen dabei.

Jochen

Da war zum Beispiel sowas dabei, wie, dass du dann halt auch

Jochen

gleich Kommando-Zeilen-Interface kriegst und so.

Jochen

Aber irgendwie...

Jochen

Was ist denn jetzt da?

Jochen

Das wäre auch schon wieder

Jochen

ein super Schwung.

Johannes

Das ist das, was FastAPI darunter

Johannes

verwendet.

Dominik

Das ist quasi von einem Blame-Entwickler, der

Dominik

Dango Resprimer gemacht hat und das hat dann

Dominik

FastAPI-Benutzung.

Dominik

Verstehe.

Jochen

Top Christy macht eine Menge coole Sachen.

Jochen

Der hat auch

Jochen

einen Nachfolger von Requests.

Jochen

Die Requests-Bibliothek hat so ein

Jochen

HTTPX. Genau.

Jochen

Hat so ein bisschen ein Problem. Und zwar

Jochen

einmal ist sie so

Jochen

slightly unmaintained

Jochen

so ein bisschen und

Jochen

sie ist auch nicht async

Jochen

und zwar auch so gar nicht.

Jochen

Und das ist ja

Jochen

heutzutage auch so ein bisschen doof, weil

Jochen

wenn schon alles async wird, dann will man

Jochen

auch so async HTTP-Requests machen

Jochen

und das geht halt mit Requests nicht.

Jochen

Oder es geht schon, aber

Jochen

da muss man halt irgendwie

Jochen

sehr unheilige Dinge tun und irgendwie

Jochen

das in Threads machen und so.

Jochen

Aber es geht halt nicht mit async.io oder so

Jochen

einfach.

Jochen

Ja, und HTTPX ist aber dann async-fähig

Jochen

und hat halt quasi fast die gleiche API wie Requests.

Jochen

Also bemüht sich auch quasi die gleiche API zu haben,

Jochen

sodass man das halt einfach quasi...

Jochen

Man kann es so verwenden, wie man es gewohnt ist.

Jochen

Genau, man kann es so verwenden, wie man es gewohnt ist.

Jochen

Man verwendet einfach HTTPX anstelle von Requests.

Jochen

Ja, auch sehr nett.

Jochen

Aber tatsächlich irgendwie ein bisschen langsam manchmal.

Jochen

Ich weiß nicht so genau.

Jochen

Naja. Ich verwechsel es immer

Johannes

mit HTMX.

Johannes

Das ist eine

Johannes

JavaScript-Bibliothek, die

Johannes

Elemente interaktiv macht.

Johannes

Ja, das ist auch interessant.

Johannes

Aber ich

Johannes

verwechsel es immer.

Johannes

Ja.

Johannes

Genau, also ja.

Jochen

Das sind so, ich weiß nicht, ob ihr jetzt noch,

Jochen

also Marshmallow, Django REST Framework,

Jochen

FastAPI mit

Jochen

Swagger Pidentic. Man kann

Jochen

dieses Swagger-Interface auch bei anderen APIs, man kann das

Jochen

auch mit Django REST-Framework verwenden. Das machen ja auch viele.

Jochen

Bei Marshmallow geht das

Jochen

bestimmt auch. Ich weiß nicht, gibt es da sonst noch

Jochen

Dinge? Ja, das ist doch das, was jetzt OpenA, also

Jochen

dieses OpenA-API-Share, was

Jochen

dann zu einem Swagger-File.

Johannes

Das ist da auch verlinkt. Ja, aber

Johannes

jetzt, um sozusagen mal noch einen Schritt weiter zu gehen,

Johannes

Jochen, du hast es ja schon angekündigt

Johannes

oder angedeutet, wenn ich jetzt eben

Johannes

nicht mehr so ein Interface habe, was

Johannes

gut auf diese

Johannes

Einzelobjekte passt, um es jetzt mal so zu sagen,

Johannes

sondern wenn ich mehr Kontrolle darüber brauche,

Johannes

was ich genau abrufe und welche Attribute

Johannes

ich abrufe, wie könnte ich das denn

Jochen

machen? Ja, genau, da kann man

Jochen

dann natürlich sowas nehmen wie

Jochen

GraphQL.

Jochen

Ja, das ist von

Jochen

Facebook, oder? Das ist Facebook, das

Johannes

entwickelt im Wesentlichen,

Johannes

um genau diesen

Johannes

Use Case abzudecken,

Johannes

dass man eben Sachen aus diesem Social

Johannes

Graph abrufen kann, der

Johannes

sich nicht an die Standard-

Jochen

Konventionen hält. Ja, sie haben halt im Grunde

Jochen

genau das Problem, dass sie halt

Jochen

sehr viele unterschiedliche, in sehr vielen

Jochen

unterschiedlichen Kontexten halt diese Daten,

Jochen

so grafförmige Daten,

Jochen

ich meine, da passt halt

Jochen

auch normales SQL, man kann ja sonst auch

Jochen

normales SQL nehmen,

Jochen

aber da passt

Jochen

das halt gar nicht so super drauf und dann

Jochen

GraphQL passt da besser und

Jochen

ja, gut, okay, ist auch wieder

Jochen

Ja, ist ja immer

Jochen

bei SQL, da hast du immer Sicherheit.

Dominik

Ihr habt das kurz übersehen, was war jetzt gerade

Dominik

der Joke dahinter?

Dominik

Da war ein bisschen tieferer Druck hinter der …

Johannes

Jeder Softwareentwickler hat sich schon mal gedacht,

Johannes

wisst ihr was, ich mache meine Schnittstelle einfach so,

Johannes

dass ich SQL-Strings hinschicke und dann das Ergebnis zurückschicke.

Johannes

Und das ist super genial, weil das ist für die Entwickler

Johannes

genau das, was die Entwickler haben wollen.

Johannes

Nur hast du damit halt … Sicherheit kannst du vergessen.

Johannes

Du hast keine Sicherheitsabfragen.

Johannes

Mit SQL kannst du alles machen.

Johannes

Ja, ja.

Johannes

Und deshalb macht man das dann doch nicht,

Johannes

sondern denkt sich eben so Sprachen aus,

Johannes

wie zum Beispiel REST oder GraphQL.

Jochen

Ja, genau. Ich weiß gar nicht,

Jochen

ob die EdgeDB-Leute noch eine eigene

Jochen

Sprache da haben oder ob die

Jochen

auch GraphQL...

Jochen

Was ist EdgeDB?

Jochen

Das sind eigentlich im Grunde die Leute

Jochen

hinter Python,

Jochen

hinter dieser ganzen Python

Jochen

Async-Geschichte,

Jochen

hinter Async.io und so.

Jochen

Die machen

Jochen

ein Ding namens EdgeDB

Jochen

und

Jochen

ja, es ist

Jochen

auch alles Async und so und

Jochen

eigentlich ziemlich cool, basiert auf Postgres

Jochen

auch, aber

Jochen

ich glaube, die hatten auch eine eigene Abfragesprache.

Jochen

Also ich dachte nur so,

Jochen

das ist vielleicht eventuell eine Konkurrenz zu GraphQL

Jochen

oder so, ich weiß nicht genau.

Jochen

Vielleicht nochmal ganz kurz zu dem Unterschied,

Dominik

also was REST jetzt macht, ist Objekte

Dominik

und damit kann man wunderbar Quad machen und das eignet sich super

Dominik

für normales Sequel.

Dominik

Und GraphQL,

Dominik

nein, falsch.

Dominik

Nee, da gibt es sowas gar nicht.

Dominik

Du kannst bei

Jochen

bei REST kannst du halt nicht

Jochen

sagen, was du gerne hättest oder du kriegst es halt.

Johannes

Genau, es sind immer einzelne Objekte

Johannes

und immer ganze Objekte.

Dominik

Oder Listen von Objekten oder sowas.

Dominik

Ja gut, du kannst halt natürlich

Jochen

unterschiedliche URLs machen, die dann unterschiedliche

Jochen

Sachen liefern, aber du kannst halt

Jochen

jetzt nicht, das wäre halt

Jochen

nicht REST-komfort. Eigentlich,

Johannes

genau, hat jedes Objekt

Johannes

in REST seine eigene URL und

Johannes

das höchste der Gefühle ist, dass du halt Listen haben

Johannes

kannst, die bestimmte Eigenschaften haben.

Johannes

Zum Beispiel entweder alle oder die, die in X verlinkt sind, dass du so Sublisten hast.

Johannes

Dann kannst du natürlich noch Filter machen, aber das geht dann schon raus, weil dann hast du schon so Listen abgerufen, die es eigentlich gar nicht gibt.

Johannes

Und das ist schon so.

Johannes

Gar nicht Rest.

Johannes

Eigentlich soll das nicht so sein.

Dominik

Also ich sollte alle Abfragen einzeln machen, um zu gucken, ob die da drin sind und dann alle wieder wegschmeißen, die es nicht sind.

Johannes

Nee, das nicht, aber diese Liste selber ist nicht, die wird nicht von REST beschrieben, weil diese Liste selber kein Objekt ist. Das heißt, um diese Liste zu finden, musst du schon wieder mehr wissen, als in Hateras drin ist, weil die nirgendwo verlinkt sein kann.

Dominik

Jetzt musst du nochmal kurz erklären, was Hateras ist, das hat nämlich eben niemand verstanden.

Johannes

Das sind diese Hypertext, also dass alles über einen Hyperlink erreichbar ist.

Dominik

Deswegen nennt man auch Hyper-Serializer beim Dango REST-Framework.

Jochen

Hyperlinks, Serializer, genau, ja, das ist ...

Jochen

Genau, damit die Links alle korrekt drin sind,

Jochen

damit du draufklicken kannst,

Johannes

das ist eigentlich einer der Grundsätze,

Johannes

dass du sozusagen den AP-Root anklickst

Johannes

und da steht dann drin, was es alles gibt

Johannes

und dann klickst du da drauf

Johannes

und da steht dann drin,

Johannes

hier gibt es die Objekte vom Typ so und so

Johannes

und dann klickst du da drauf

Johannes

und dann kommt ein Objekt vom Typ so und so.

Johannes

Dass alles, was es gibt,

Johannes

über einen Hyperlink erreichbar ist.

Johannes

Und wenn du jetzt so Get-Parameter einführst,

Johannes

die Filter haben oder so,

Johannes

dann sind die nirgendwo verlinkt.

Johannes

Die musst du kennen.

Johannes

Und das ist schlecht, weil

Johannes

dann ist deine API nicht mehr

Johannes

durchsichtig, sondern die ist jetzt

Johannes

undurchsichtig geworden.

Johannes

Du findest das nicht

Johannes

in der API.

Dominik

Vielleicht über Options? Kann man sowas

Dominik

in die Options schreiben?

Dominik

In den Options

Dominik

kriegst du eigentlich die Header zurück.

Dominik

Da kriegst du eigentlich die Header zurück

Johannes

und dann müsstest du dir wieder irgendwelche

Johannes

X-Header überlegen,

Johannes

die auch nicht standardkonform sind,

Johannes

die du auch, von denen du auch

Johannes

wissen musst, dass du quasi

Johannes

die Header gucken musst, um das zu finden.

Johannes

Das, was Django REST Framework da macht,

Johannes

ist ja schon eine sehr

Johannes

gute Sache, dass du die Dokumentation mitlieferst,

Johannes

kannst dir die Dokumentation anschreiben.

Johannes

In einem Swagger-File

Johannes

weiß ich gar nicht, wie das abgebildet werden

Johannes

würde. Ich glaube, da gibt es auch eine Möglichkeit,

Johannes

Parameter zu definieren.

Johannes

Aber es ist eben nicht mehr

Johannes

in der API selber drin, sondern es geht

Johannes

über die API hinaus. Und das ist

Johannes

eigentlich nicht was, was man möchte. Es ist nicht

Dominik

erfahrbar. Gut, aber das ist ja schon wieder

Dominik

jetzt sowas, wo es halt regnet und

Dominik

du willst halt, jeder möchte irgendwelche

Dominik

Dinge filtern. Ja klar und

Dominik

deshalb hat da jede REST

Johannes

API auch sowas. Aber es ist eben

Johannes

nicht offensichtlich. Wenn du die zum ersten Mal benutzt, dann

Johannes

weißt du nicht, dass es da ist.

Johannes

Du findest es eventuell erst, wenn du sie

Johannes

fünf Jahre lang benutzt hast. Und das

Johannes

ist eigentlich nicht gut.

Johannes

Und GraphQL ist jetzt wieder so ein kleines bisschen

Johannes

einen Schritt in Richtung Remote Procedure Call,

Johannes

wo du eben nicht sagst,

Johannes

gib mir folgendes Objekt, sondern

Johannes

es ist mehr so, führe bitte folgende Abfrage

Johannes

aus.

Dominik

Du hast halt eine Schritte von Objekten, die in

Dominik

einer Kette liegen. Du hast halt

Jochen

auch nicht eine URL für die unterschiedlichen Geschichten,

Jochen

sondern du hast halt eine URL,

Jochen

an die alles geht. Und

Jochen

es gibt nicht mehr Delete,

Jochen

Pad, Putsch,

Jochen

Putsch, der

Jochen

mächtigste aller

Jochen

Aber auch

Jochen

sehr teuer.

Jochen

Funktioniert nicht immer.

Jochen

Genau.

Jochen

Es gibt

Jochen

eben diese ganzen Werben nicht. Es gibt nur

Jochen

Post. Das war's.

Jochen

Und ja, das ist natürlich

Jochen

Ja. Hat andere Vor- und Nachteile.

Jochen

Ja, es hat halt andere Trade-Offs

Dominik

irgendwie. Okay, also

Dominik

ich kann aber dann tiefer reingucken

Dominik

und bekomme

Dominik

andere, deutlich fokussiertere

Dominik

Daten schneller

Dominik

oder, worum geht es bei der Grafik?

Dominik

Ja, eventuell schneller.

Dominik

Insbesondere kannst du es steuern.

Johannes

Du kannst sagen, ich habe jetzt in diesem Request

Johannes

brauche ich alle Objekte,

Johannes

die folgende Eigenschaften haben und

Johannes

dazu alle, die folgende Eigenschaften

Johannes

haben und davon aber nur das Attribut

Johannes

Name. Und

Johannes

anstatt, dass du dann halt in deiner Übersichtsliste,

Johannes

so wie es bei REST ist, erstmal

Johannes

alle abrufen musst, um den Namen anzuzeigen,

Johannes

führst du halt

Johannes

Designer-Abfrage aus und kriegst die Liste

Johannes

der Namen zurück, die du dann direkt anzeigen kannst.

Johannes

Also diese GraphQL-Schnittstelle

Johannes

ist viel näher an

Johannes

so einem Datenbank-Interface

Johannes

jetzt ganz

Johannes

spezifisch für Graph-Datenbanken

Johannes

als es

Johannes

REST ist.

Johannes

REST ist ja wirklich eigentlich ein Object-Store.

Dominik

Mehr dann Sinn, wenn man sowas wie

Dominik

ich versuche

Dominik

jetzt mal abstrakt zu

Dominik

visualisieren, wolkige

Dominik

Datenformen hat als tabellenförmige

Jochen

Datenform? Ja, wenn du

Jochen

verschachtelte

Jochen

Strukturen hast, also wenn du zum Beispiel

Jochen

eine Liste von Freunden von Freunden hast

Jochen

oder Kommentare, die

Jochen

auf Kommentare zeigen, die

Jochen

irgendwie in so einer

Jochen

Grafenstruktur

Jochen

halt irgendwie angeordnet

Jochen

sind, weil dann wird es halt mit SQL immer so ein bisschen

Jochen

ätzend, das geht auch, aber es ist halt dann,

Jochen

da muss man sich dann was einfallen lassen. Also wenn ich

Dominik

in SQL jetzt denken würde, wenn ich

Dominik

zu viele Following Keys hätte in meinen

Dominik

einzelnen Daten.

Dominik

Nee, rekursive.

Jochen

Genau, wenn du einen Baum hast oder

Jochen

einen Grafen im Allgemeinen.

Dominik

Was ja schon schwierig ist,

Johannes

in der Datenbank abzubilden.

Johannes

Das ist gar nicht so einfach, das abzubilden.

Johannes

Was sind deine Lieblingsgrafenstrukturen

Johannes

in Datenbanken?

Jochen

Ich weiß es nicht.

Jochen

Ich weiß, dass der

Jochen

Auto von FeinCMS

Jochen

der Treebird

Jochen

ich weiß nicht genau, was...

Jochen

Was ich eine ganze Zeit

Jochen

gemacht habe, ist Nesse Z.

Jochen

Das geht eigentlich ganz gut.

Jochen

Aber es ist halt schon

Jochen

echt haarig. Also

Jochen

das ist schon so...

Jochen

Ja, bei

Johannes

Matthias Pass sind die

Johannes

Abfragen so bescheuert. Das ist schon

Johannes

cool, aber die Abfragen sind so blöd.

Dominik

Matthias Pass, Entschuldigung, ihr habt jetzt gerade wieder irgendwie...

Dominik

Ähm...

Dominik

Was habt ihr gesagt?

Dominik

Dominik googelt.

Jochen

Ja, also die Frage

Jochen

ist halt, wie

Jochen

bildet man solche Strukturen eigentlich

Jochen

in relationalen Datenbanken ab? Und das ist halt nicht so

Jochen

einfach. Es gibt halt das grüne

Jochen

Buch von Joey Chalko oder so.

Jochen

Trees and Hierarchies

Jochen

in SQL oder so. Das kann man sich halt durchlesen.

Jochen

Da stehen die ganzen Methoden, die man

Jochen

da verwenden kann, drin.

Jochen

Aber tatsächlich, also das, was

Jochen

viele Leute... Und die sind alle schlecht.

Johannes

Und die sind alle schlecht. Die sind alle blöd.

Johannes

Ganz ehrlich, es ist einfach schwierig, Graph-Daten, also Vernetzungsnetzwerke in eine Tabelle zu schreiben, weil in der Tabelle kannst du einfach inhärent keine Netzwerke reinschreiben und alles, was man da macht, ist ein Hack und die haben alle Vor- und Nachteile und die sind alle schlecht so.

Johannes

Und deshalb gibt es ja auch Graph-Datenbanken und eben andere NoSQL-Datenbanken, die dafür besser geeignet sind.

Johannes

Ja, und ein klassisches

Jochen

Anwendungsbeispiel für sowas, wo man

Jochen

das dann halt braucht und wo man Schwierigkeiten mit

Jochen

ist halt sowas wie, ja, wenn ich

Jochen

jetzt wissen will, was sind denn jetzt alles

Jochen

meine Freunde vierten Grades

Jochen

oder so, dann wird halt, ist halt

Jochen

auf einer Eskalierdatenbank, ist halt kacke.

Dominik

War das nicht irgendwie so eine Theorie, die sagte, dass man mit

Dominik

allen Freunden oder alle Leute, die in

Dominik

Facebook im Moment am spätesten sind?

Jochen

Genau, Small World Theorien, ja.

Jochen

Sechs?

Jochen

Ja.

Johannes

Ja, six degrees of separation heißt das.

Johannes

Okay.

Johannes

Six Degrees of Kevin Bacon heißt es auch, glaube ich, aber das ist noch was anderes.

Johannes

Ja, ja, ja.

Johannes

Ja, aber also wie gesagt, GraphQL ist quasi so ein Schritt in Richtung RPC wieder, wo ich eben einen Endpoint habe, wo ich alles hinschicke und dann aber dafür eben vergleichsweise komplexe Abfragen ausführen kann.

Johannes

Ich kann da allerdings auch eben vergleichsweise komplexe Updates ausführen, dass ich eben sage, ich möchte gerne folgende Objekte holen und dann auch bearbeiten oder folgende Objekte holen und dann auch irgendeine Operation aus denen ausführen und das ist sehr, sehr mächtig.

Johannes

Aber es ist eben nicht mehr so erfahrbar, es ist nicht so durchsichtig wie eine REST-API, weil man eben wieder darauf zurückgeht, dass man die Dokumentation hat, dass man die Namen von den Funktionen wissen muss, dass man die Attribute von den Objekten wissen muss und ich kann nicht Deep Links drauf machen, was bei einer API nicht ungeheuer schlimm ist, aber ja, es ist einfach mehr Wissen außenrum.

Johannes

Ja, der Client

Jochen

ist halt viel

Jochen

fetter sein, sozusagen.

Jochen

Auch eine nette Geschichte,

Jochen

kommt darauf an, welchen Client und welche

Jochen

Server man so verwendet, aber man kann halt auch

Jochen

sowas machen wie Subscribe,

Jochen

dass man halt eine Query, die man eh stellen muss,

Jochen

also man muss sie eh hinschreiben,

Jochen

weil man ja irgendwie die Daten holt und dann sagt man halt,

Jochen

wenn man daran interessiert ist,

Jochen

Updates davon reaktiv zu bekommen, dann sagt man

Jochen

einfach nur Subscribe und dann

Jochen

kriegt man per WebSocket halt Änderungen

Jochen

an dem Query-Set, auf das man

Jochen

unsubscribed ist. Und dann kann man

Jochen

tatsächlich, wenn zwei Leute irgendwie den gleichen Kram

Jochen

editieren oder so,

Jochen

dann sieht man die Änderung von einem anderen halt direkt oder so.

Jochen

Und das ist halt, geht alles automatisch, voll gut.

Jochen

Ja, einfach cool.

Jochen

Tolle Sachen, ja.

Jochen

Ich habe vor einer Weile was

Johannes

gefunden, das heißt Graffiti mit

Johannes

PH.

Johannes

Graffiti.dev, das ist auch ein Link,

Johannes

der da rein muss, das mir sehr gut gefallen hat.

Johannes

Ich weiß noch nicht,

Johannes

wie ich damit zurechtkomme und ob das,

Johannes

das ist so ein bisschen

Johannes

wie Ruby on Rails. Ruby on Rails hat

Johannes

ja früher die ganzen coolen Sachen

Johannes

gekonnt, die Django, wo Django

Johannes

so ein bisschen langweilig war. Und hier

Johannes

ist es jetzt wieder genauso. Das ist so eine Ruby-Bibliothek,

Johannes

die so ein bisschen die Brücke schlägt

Johannes

zwischen REST und GraphQL.

Johannes

Das ist quasi

Johannes

REST mit ganz vielen Konventionen,

Johannes

sodass du

Johannes

daraus so eine Art

Johannes

GraphQL machst, mit den Vorteilen von beiden

Johannes

Seiten. Du kannst coole Queries

Johannes

ausführen, aber hast trotzdem die

Johannes

ganzen guten Vorteile.

Johannes

Okay, interessant. Mal angucken.

Johannes

Ja, aber es ist, alle Beispiele

Johannes

sind in Ruby und

Johannes

ich habe noch nicht

Johannes

gefunden, ob das auch

Johannes

in Python oder gar in Django

Johannes

geht und das wäre sehr schön.

Johannes

Diese Konzepte, die

Johannes

da drin sind, haben mir sehr gut gefallen, weil die halt

Johannes

sehr viel über Konventionen machen.

Johannes

Das ist quasi eine Restriktionstelle mit ganz vielen

Johannes

Konventionen.

Johannes

Und auch mit ganz vielen,

Johannes

wo dann eben Sachen über Datentypen

Johannes

laufen. Also hier wird dann

Johannes

so eine Ressource definiert,

Johannes

die ein Attribut hat, was ein Name ist, was ein String

Johannes

ist, der sortable ist, der filterable ist

Johannes

und wenn du diese zwei Attribute

Johannes

hast, dann weißt du ja schon ganz viel darüber,

Johannes

dann weißt du schon ganz viele Operationen, die du da

Johannes

machen kannst, was dann eben wieder zurückgeht

Johannes

auf das, was der Dominik eben

Johannes

angesprochen hat. Man braucht halt

Johannes

sortieren und filtern und

Johannes

irgendwie muss man das abbilden

Johannes

und warum nicht eine gängige Konvention

Johannes

machen und das der Ressource mitgeben und

Johannes

sagen, okay, hier,

Johannes

da steht immer dieses, dass es

Johannes

sortierbar ist, ja oder nein, oder dass es beschreibbar

Johannes

ist, ja oder nein,

Johannes

dann reicht es doch aus,

Johannes

das zu wissen. Und das ist quasi so eine Formalisierung

Johannes

davon,

Johannes

dass du nur noch diese Attribute

Johannes

hast und dann ganz viel daraus automatisch

Johannes

rausfällt.

Johannes

Und das ist ein

Johannes

sehr schöner Ansatz, der

Johannes

vielleicht meiner Meinung nach auch

Johannes

sehr zukunftsweisend ist und

Johannes

auch noch nicht weit genug

Johannes

überall verfügbar ist.

Dominik

Das heißt, du fragst einfach die API und weißt direkt, wie man die

Dominik

benutzen kann, ohne dass du weiter...

Dominik

Du fragst quasi die

Johannes

API nach den Datentypen und aus

Johannes

den Datentypen ergeben sich dann Sachen.

Johannes

Die

Johannes

API gibt dir auch zu den

Johannes

Datentypen die Operationen zurück, aber

Johannes

wenn da eben zu einem Feld Sortable

Johannes

drin steht, dann brauchst

Johannes

du ja gar nichts mehr dazu sagen, weil das ist

Johannes

eine Standardsache, die jeder braucht und dann kannst

Johannes

du einfach sagen, okay, ich weiß jetzt, wie Sortable,

Johannes

dass es auf diesem Feld Sortable ist und

Johannes

ich weiß, wie Sortable auf diesem, auf

Johannes

Feldern generell funktioniert.

Johannes

oder auf Feldern vom Typ String funktioniert,

Johannes

dann kann ich da einfach diese Sortable-Operation,

Johannes

diese Sortier-Operation machen.

Johannes

Und das ist so ein bisschen das,

Johannes

als ich das zum ersten Mal gelesen habe,

Johannes

war das auch so ein Moment, wo ich mir dachte,

Johannes

ah, das ist genau das, was beiden fehlt.

Johannes

Das ist eigentlich die Vorteile von REST

Johannes

und die Vorteile von GraphQL zusammen.

Johannes

Leider habe ich es noch nicht realisieren können,

Johannes

weil es eben, wie gesagt, so, naja,

Johannes

Installation, da steht dann, wie man es bei Ruby installiert,

Johannes

Und dann, gut, schade.

Johannes

Also in meine Rails-Applikationen

Johannes

könnte ich das jetzt sehr leicht reintun.

Johannes

Leider habe ich davon keine.

Johannes

Tja, tja.

Johannes

Ja, schade.

Johannes

Hätte jemand Lust,

Johannes

ein Open-Source-Projekt anzufangen?

Johannes

Oh.

Johannes

Ja.

Johannes

Lust schon.

Johannes

Falls sich Sponsoren für dieses Unternehmen finden,

Johannes

Die melden sich bitte bei hallo-at-podcast.de.

Johannes

Ich wäre sehr daran interessiert, da einen Sponsor zu finden.

Johannes

Ich würde auch meinen üblichen Stundensatz reduzieren,

Johannes

selbstverständlich für Open Source Work.

Johannes

Bisher habe ich keinen Sponsoren gefunden,

Johannes

der das bezahlen könnte.

Johannes

Meine Firma ist leider nicht reich genug,

Johannes

um sowas Großes anzugehen.

Johannes

Aber jemand sollte das machen, absolut.

Jochen

Ja, ansonsten, genau,

Jochen

ich weiß nicht, auch interessant

Jochen

diese Formate, die man

Jochen

da übertragen kann.

Jochen

Dazu fällt mir

Jochen

gerade noch eine

Jochen

Geschichte ein. Es gibt da

Jochen

so einen Podcast,

Jochen

den ich auch immer höre, weil mich dieses,

Jochen

im Prinzip dieses Ganze, weil ich

Jochen

diese,

Jochen

oh Gott, Hölzchen, Stöckchen,

Jochen

ich fange mal noch weiter vorne an.

Jochen

Wir kennen das von Jochen wieder.

Jochen

Python Podcast ist ja sozusagen

Jochen

in dem Python-Genre selber gehostet

Jochen

und

Jochen

ich bin nicht so richtig super zufrieden damit.

Jochen

Es funktioniert schon so, aber eigentlich würde mich

Jochen

natürlich nicht interessieren, wie man das richtig macht.

Jochen

Und da gibt es einen anderen Podcast, nämlich den

Jochen

Podlovers Podcast.

Jochen

Und

Jochen

genau, den höre ich dann, weil da reden Leute

Jochen

darüber, wie sie das halt, also

Jochen

Podlove ist halt das WordPress-Plugin.

Jochen

Das ist quasi ein Meta-Podcast.

Jochen

Ein Podcast aus Podcasten, ja.

Jochen

Ja, oder über Podcasts heftig, genau. Und da dachte ich, ja, vielleicht dann bin ich das an, wenn ich da mal, also ich finde es auch tatsächlich ein super Ding und ich höre das und versuche mir dann die ganzen guten Ideen alle, versuche ich da zu stehlen und dann selber zu verwenden.

Jochen

Und letztens gab es dazu eine interessante Episode zu den Podcast-Clients und zu Feed-Parsing und sowas. Es gab da einige Episoden schon, ich weiß jetzt nicht mehr genau welche, wo es darum ging, wie sollen denn die Formate und jetzt gibt es auch inzwischen Podcasts, die sind ja so relativ gehypte Geschichte auch.

Jochen

und jetzt kommen

Jochen

Leute wieder auf die Idee, nachdem da

Jochen

seit zig Jahren,

Jochen

über zehn Jahren, lange nichts

Jochen

an den Standards passiert ist, oh, vielleicht können wir

Jochen

doch mal was an den Standards machen, weil

Jochen

vielleicht will man ja

Jochen

auch dann so ein paar Features ändern oder sich

Jochen

irgendwie abgrenzen oder, keine Ahnung, cooler sein als die

Jochen

anderen. Und es gibt jetzt

Jochen

podcastindex.org und so, wo halt

Jochen

das sind auch Leute, die das schon ganz lange machen,

Jochen

sich halt wieder so überlegen, ob man da nicht

Jochen

noch irgendwelche neuen, interessanten Dinge

Jochen

statisieren kann und so. Und

Jochen

da ging es dann halt auch immer darum,

Jochen

okay, die ursprünglichen Standards

Jochen

zu Podcasts oder zu Blogs,

Jochen

das ist halt alles XML, RSS.

Jochen

RSS ist XML? Ja.

Jochen

Genau, und

Jochen

die Frage wäre halt,

Jochen

okay, und dann gab es irgendwie

Jochen

die Idee, oh, man könnte ja

Jochen

vielleicht auch JSON-Feeds nehmen,

Jochen

so heute macht man ja eigentlich

Jochen

kein XML mehr so richtig.

Jochen

und wäre das nicht

Jochen

wäre das

Jochen

nicht irgendwie besser und dann war so

Jochen

hatte ich so den Eindruck, da waren

Jochen

Leute doch, fanden XML eigentlich ganz cool

Jochen

und dachten so, ne Jason

Jochen

warum denn und lieber XML

Jochen

und zum Rest hat man

Jochen

dieses Problem ja auch, dass man die Daten irgendwie übertragen muss

Jochen

und da habe ich auch so das Gefühl

Jochen

XML spielt im Grunde keine Rolle mehr

Jochen

so richtig und

Jochen

alle machen halt irgendwie JSON

Jochen

ich weiß nicht, man könnte es auch als CSV

Jochen

machen, hat das jemand schon mal gemacht?

Dominik

Also ich müsste mal kurz Gründe nennen, warum es

Dominik

überhaupt XML gut sein könnte, dass

Dominik

ich habe das nämlich letztens irgendwann mal gehört, dass irgendwer meinte

Dominik

oh, XML wird doch eigentlich total unterschätzt

Jochen

Ja, also

Jochen

weiß ich, also ich

Jochen

kann mir vorstellen, wie man auf die Idee kommt

Jochen

ich würde das wahrscheinlich nicht sagen

Jochen

also ich hatte eigentlich nie eine besonders hohe Meinung von XML

Jochen

und

Jochen

aber ich kann in gewisser Weise

Jochen

verstehen, wie man aus einer theoretischen Perspektive

Jochen

sozusagen drauf kommt, dass das eine gute Idee wäre

Jochen

weil viele der Probleme, die man sonst hat

Jochen

wenn man das nicht macht,

Jochen

man ja vielleicht damit lösen könnte.

Jochen

Also zum Beispiel eben, wenn man jetzt

Jochen

das vergleicht mit sowas wie CSV,

Jochen

was früher, also

Jochen

wenn man mit CSV Probleme hat,

Jochen

dann könnte man denken, dass XML vielleicht eine,

Jochen

ja, also man könnte sich vorstellen,

Jochen

dass XML vielleicht eine gute Idee ist, wenn man

Jochen

jetzt, schon mal vorher so

Jochen

Es ist immer eine gute Idee.

Jochen

Kann man alles machen. Ja, kann man.

Jochen

Tatsächlich,

Jochen

aber

Jochen

ja, also wenn man jetzt

Jochen

vorher, wenn man jetzt irgendwie sowas wie CSV hat und man

Jochen

hat jetzt da Probleme, weil irgendwie

Jochen

Leute machen komische,

Jochen

schreiben da komische Sachen rein und Dinge gehen kaputt,

Jochen

dann kann man sich denken so,

Jochen

mir reicht's.

Jochen

Diese Barbaren, immer was sie da

Jochen

für komische Sachen, also tatsächlich, ich habe auch

Jochen

ja einige Zeit im

Jochen

Import-Export-Geschäft sozusagen von solchen

Jochen

Daten verbracht und

Jochen

da passieren halt die komischsten Sachen,

Jochen

dass halt irgendwie das

Jochen

das Encoding wechselt von Zeile zu Zeile,

Jochen

dass IDs halt keine IDs

Jochen

sind, dass irgendwie

Jochen

das Escaping sehr

Jochen

kreativ anders ist und das hat halt damit

Jochen

zu tun, dass halt da Daten

Jochen

aggregiert werden aus unterschiedlichen Datenquellen,

Jochen

dass die dann irgendwie nochmal

Jochen

als Excel irgendjemandem auf dem Tisch standen

Jochen

und der editiert dann fröhlich drin rum, speichert es wieder

Jochen

als was anderes und schickt es dann nochmal raus oder so.

Jochen

Also da passieren dann wilde Sachen

Jochen

und da könnte man sich jetzt denken, oh super,

Jochen

nehme ich doch XML, habe ich dieses Problem

Johannes

gelöst, weil... Da sind alle Probleme gelöst.

Jochen

Da sind alle Probleme gelöst, weil da habe ich ein Schema,

Jochen

da steht drin, was das ist

Jochen

und wenn da jemand dann Mist macht, dann geht das

Jochen

einfach gar nicht. Da steht Spezifikation quasi

Jochen

mit in der Datei.

Jochen

Ja, ein Schema. In einer anderen Datei.

Jochen

Ah ja, genau.

Jochen

Und ja,

Jochen

tatsächlich ist es aber so,

Jochen

ich würde sagen, eben, das klingt

Jochen

danach, als wäre das eine Lösung, praktisch.

Jochen

Jetzt so aus diesem

Jochen

Tages-Import-Export-Geschäft

Jochen

mit vielen

Jochen

Dateien, die da reinkommen und rausgehen

Jochen

und unterschiedlichen

Jochen

Anforderungen und komplizierten

Jochen

und komischen Systemen dahinter und seltsamen Leuten

Jochen

und so, muss ich sagen,

Jochen

wir haben dann

Jochen

irgendwie, also

Jochen

XML und CSV gehabt und wir haben

Jochen

immer CSV empfohlen

Jochen

und XML hat zu

Jochen

vielen fiesen Problemen geführt,

Jochen

die ehrlich gesagt schlimmer waren als das, was wir

Jochen

mit CSV. Aber nicht die Encodings.

Jochen

Nicht die Encodings. Das Encoding war okay, ja.

Johannes

Encodings sind gut bei

Johannes

XMR. Ja.

Jochen

Naja, gut. Manchmal kriegt man

Jochen

auch so komische Byte-Order-Marker vorne dran,

Jochen

die dann irgendwie auch Sachen kaputt machen.

Jochen

Aber, ja,

Jochen

tatsächlich,

Jochen

aber das Problem ist halt,

Jochen

wenn du den Leuten halt

Jochen

sozusagen ein, oder

Jochen

das wäre sozusagen

Jochen

das Ding, was ich

Jochen

dazu

Jochen

mitgeben wollen würde.

Jochen

Und die Anekdote dazu wäre halt,

Jochen

wenn man es unmöglich

Jochen

macht, dass solche Fehler passieren, dass halt zum

Jochen

Beispiel das Encoding pro Zeile sich ändert

Jochen

oder so, dann kann es sein,

Jochen

dass das dazu führt, dass die

Jochen

Fehler schlimmer werden und nicht besser.

Jochen

Nämlich, was dann halt tatsächlich passiert, was man

Jochen

dann beobachtet, was ist die

Jochen

Konsequenz, wenn man das unmöglich macht, dass solche Fehler

Jochen

passieren? Naja, dann

Jochen

kriegt man halt Dateien, die zwar

Jochen

syntaktisch okay sind, aber die semantisch

Jochen

halt irgendwie nicht mehr funktionieren.

Jochen

Wo dann zum Beispiel Teile einfach fehlen

Jochen

oder die leer sind. Die sind ein gültiges XML-Dokument,

Jochen

aber es ist halt irgendwie leer.

Jochen

Und dann ist halt die Frage, okay, was macht man denn jetzt?

Johannes

Oder du hast dann die Fehler

Johannes

in den Daten drin. Ich meine, wir haben ja alle schon mal

Johannes

diese UTF-8-Steuerzeichen

Johannes

überall in Latin-One-Dingern

Johannes

drin gesehen.

Johannes

Und wenn das jemand reinkopiert, dann

Johannes

ist halt so. Und dann kannst du auch nicht mehr viel machen.

Johannes

Genau. Und dann

Jochen

das ist nämlich der Punkt, wo es dann

Jochen

eben, wenn dann Fehler passieren auf einer anderen Ebene

Jochen

oder halt so, dass der XML-Parser

Jochen

sagt, ja, alles okay, aber

Jochen

es ist eigentlich gar nicht okay, dann

Jochen

kannst du nicht mehr viel tun. Bei einem CSV,

Jochen

wo das, da kann man immer noch was tun.

Jochen

Wenn da irgendwie eine Exception fliegt, da kann man die immer noch fangen

Jochen

und kann sagen, okay, den Kunden kenne ich.

Jochen

Der kann sich nicht einigen,

Jochen

ob er da jetzt

Jochen

Beton-1 oder UTF-8 oder

Jochen

CP-51, weiß ich nicht, dieses Windows-Dings

Jochen

da verwendet oder so. Ja, ja, ist schon

Jochen

okay, dann probieren wir die mal der Reihe nach durch

Jochen

und einer von den Codecs wird schon funktionieren.

Jochen

Und meistens funktioniert das auch. Und selbst wenn es nicht funktioniert, dann ist halt eine Zeile kaputt oder so. Was oft nicht so schlimm ist. Wenn eine von 10.000 Zeilen kaputt ist, na gut. Das degraded gracefully sozusagen irgendwie. Das ist okay.

Jochen

Naja, das ist eine sehr interessante Beschreibung

Jochen

von Christful Degradation.

Jochen

Es kommt vielleicht auch drauf an, welche Zeile

Jochen

das war, aber

Jochen

im Endeffekt, da

Jochen

werden Leute nicht wütend oder rufen an,

Jochen

deswegen oder so, wenn da eine Zeile nicht okay war.

Jochen

Wenn das XML leer war

Jochen

und man jetzt raten muss, was passiert ist,

Jochen

möchte der Kunde zum Beispiel alle seine Angebote

Jochen

löschen, weil man definiert hat,

Jochen

wenn das ein leeres Ding ist,

Jochen

oder offline schalten,

Jochen

dann kann man das tun.

Jochen

Das könnte Ärger geben, oder man macht

Jochen

es nicht, das könnte auch Ärger geben, weil

Jochen

vielleicht wollte er es ja tatsächlich machen. Also man muss halt

Jochen

irgendwie dann raten und das ist

Jochen

halt doof, weil jede dieser

Jochen

Entscheidungen, die man trifft, kann halt potenziell

Jochen

entweder bei einem selber zu

Jochen

irgendwie

Jochen

größeren Problemen und Geldverlust oder beim Kunden

Jochen

zu größeren Problemen und Geldverlust führen.

Jochen

Und das ist halt schlecht, weil das ist halt nicht so

Jochen

richtig gracefully.

Jochen

Und

Jochen

ja. Das ist so ein bisschen wie

Jochen

diese statistische

Jochen

interessante Anormalität.

Johannes

als man die Helmpflicht für Motorräder eingeführt hat,

Johannes

ist die Zahl der Kopfverletzungen gestiegen.

Johannes

Und der Grund ist halt einfach,

Johannes

dass die Leute, die vorher gestorben sind,

Johannes

jetzt Kopfverletzungen haben.

Johannes

Ah, okay.

Johannes

Und so ein bisschen ist es da halt auch.

Johannes

Du schließt die einfachen Fehler aus

Johannes

und deshalb kommen jetzt halt die schlimmen Fehler.

Jochen

Ja, eine andere Möglichkeit wäre auch noch,

Jochen

dass die Leute, die vorher Fahrrad gefahren sind,

Jochen

jetzt dann halt irgendwie Autofahren

Jochen

und dann die Wahrscheinlichkeit für Kopfverletzungen im Auto steigt

Jochen

oder sowas.

Johannes

Ja, genau. Viele unabsehbare

Johannes

Konsequenzen. Unintended

Johannes

Konsequenzen. Externe Effekte.

Johannes

Ja.

Johannes

Insofern.

Dominik

Jetzt haben wir zu viel über XML geredet in der

Dominik

Restfolge, ehrlich gesagt.

Dominik

Ja, das ist ja nicht ausgeschlossen. Du kannst ja

Dominik

wie auch Jungle Rest Framework bietet ja

Dominik

den XML

Dominik

Sequencer.

Dominik

Wer will das denn lesen? Wer will das denn parsen?

Dominik

Wer will das denn weiterverarbeiten? Das ist doch alles

Dominik

total hässlich und dann... Ja, kann doch sein,

Johannes

dass du irgendeinen Client hast, der das halt

Johannes

kann er haben. Für Entity and Attributes

Johannes

of Attributes of Entities.

Johannes

XML hat ja auch Vorteile.

Johannes

Zähle uns die doch

Johannes

bitte auf, Johannes. Nein.

Johannes

Ich weiß,

Johannes

dass es welche hat, aber ich will sie jetzt nicht

Johannes

sagen, weil ich will niemanden dazu verführen.

Johannes

Na gut.

Johannes

Ja,

Jochen

anderes Format, auf dem man auch noch gut rumhalten

Jochen

könnte, wäre Jason.

Jochen

Das ist,

Jochen

ich meine tatsächlich, ehrlich gesagt, es hat

Jochen

auch so diverse Hässlichkeiten

Jochen

und so, aber Jason

Jochen

funktioniert eigentlich schon. Also,

Jochen

das kann man eigentlich auch, also man kann das schon

Jochen

nehmen. Es ist nicht so schlimm.

Jochen

Ja. Was war denn diese Datumangaben?

Jochen

Ich bin ja ein großer Freund von Messagepack.

Jochen

Ja, ja. Was ist Messagepack?

Johannes

Messagepack ist quasi binäres

Johannes

und gepacktes Jason. B-Jason.

Johannes

Sagt man das so?

Johannes

Ja, bjson ist noch mal was anderes.

Johannes

Und es gibt auch bson, also B-S-O-N.

Johannes

Das ist Binary Serialized Object Notation oder sowas.

Johannes

Ist auch was anderes.

Johannes

Das ist das, was in Postgres drin ist.

Johannes

Und dann gibt es noch hason.

Johannes

Das weiß ich nicht, was es ist.

Johannes

Das ist auch in Postgres drin.

Jochen

Das ist, glaube ich, die ältere Variante, aber ja.

Jochen

Ja, kann sein.

Johannes

Ja, MessagePack ist quasi ein Drop-In-Replacement für JSON,

Johannes

nur schneller und kleiner.

Johannes

Das kann man, glaube ich,

Jochen

bei Django REST Framework kann man das auch irgendwie

Jochen

mit dazu konfigurieren.

Jochen

Ja klar, das ist halt auch

Johannes

so ein Standard. Ah, die heißen nicht Serializer,

Johannes

sondern heißen irgendwie anders. Das muss man halt

Johannes

in der Konfiguration angeben als Klasse und

Johannes

die haben ja ihre

Johannes

Abfolge und wenn der Client nichts sagt, dann kriegt

Johannes

das halt in der richtigen...

Jochen

Ich glaube, die heißen irgendwie Renderer oder sowas.

Jochen

Ja, das kann sein.

Jochen

Früher war das tatsächlich,

Johannes

konnte man tatsächlich sehr schöne Dinge machen, weil

Johannes

halt Message-Pack-Nachrichten

Johannes

kleiner sind als JSON-Nachrichten

Johannes

und in einem Mobile-Umfeld war das früher

Johannes

ein sehr, sehr wichtiger

Johannes

Aspekt, dass man unter

Johannes

65 Kilobyte bleibt, weil das eben

Johannes

ein Datenpaket

Johannes

war, früher, damals,

Johannes

als es noch 3G gab

Johannes

oder 2G oder was auch immer.

Johannes

Und da war Message-Pack richtig, war ein richtiger,

Johannes

cooler Vorteil, weil du

Johannes

halt nichts machen musstest und trotzdem

Johannes

unter den 65K geblieben bist

Johannes

normalerweise.

Johannes

Und das war damals

Johannes

wichtiger. Heutzutage ist es wichtiger, dass es

Johannes

lesbar ist, deshalb nimmt man lieber JSON.

Johannes

Ja.

Johannes

Ja, oder

Jochen

andere Leute, die haben direkt komplett

Jochen

alle Daten, wenn man nicht viele Daten hat, was man auch

Jochen

ganz gut machen kann, dass man zieht einfach alle

Jochen

Daten komplett.

Jochen

Weil man dann halt auch die Antenne

Jochen

nicht so, das ist ja auch sowas,

Jochen

Stromverbrauch, wenn man die Antenne

Jochen

anschaltet.

Jochen

Ja.

Jochen

Macht man auch nicht mehr so häufig.

Jochen

Ja, eigentlich ist er dran.

Johannes

Jetzt haben wir noch, ich meine, jetzt haben wir

Johannes

sehr viel über REST gesprochen und über Alternativen.

Johannes

Im Grunde ist REST

Johannes

ja was ganz Simples. Es ist einfach nur

Johannes

die HTTP und

Johannes

HTML angewendet, äh nicht HTML,

Johannes

HTTP angewendet auf APIs.

Johannes

Und

Johannes

ja, so sollte man es

Johannes

machen. Das wäre, so wäre es gut, wenn man das

Johannes

macht.

Johannes

Und das ist ja schon

Johannes

Oh, eine

Jochen

Sache, die ich ganz interessant

Jochen

finde, die eventuell nochmal dazu führen

Jochen

könnte, dass es halt so ein bisschen Renaissance

Jochen

in die Richtung gibt, weil man

Jochen

vielleicht kann man Teile von dem, was man jetzt mit GraphQL

Jochen

macht, auch dadurch erreichen, dass man

Jochen

Endpunkte miteinander kombiniert

Jochen

oder irgendwelche Aggregations-Endpunkte macht

Jochen

und die dann halt

Jochen

per Async, also normalerweise würde man sagen

Jochen

so, ja, viele Requests machen

Jochen

nicht so cool, weil blockiert halt

Jochen

immer einen Worker im

Jochen

Applikations-Server, aber wenn man jetzt Async hat, dann

Jochen

ist es vielleicht auch egal. Und dann

Jochen

kann man sich sozusagen

Jochen

seine Ergebnissets auch

Jochen

so ein bisschen darüber zusammenbasteln

Jochen

und diese Dinge halt Endpunkte

Jochen

vielleicht so on the fly generieren oder weiß ich nicht.

Jochen

Naja.

Jochen

Da gibt es übrigens

Dominik

einen Artikel zu, wenn ich jetzt mal da Werbung machen darf.

Dominik

Auf deinem

Dominik

Blog, Jochen, über diese

Dominik

Async-Aggregations-API hast du da

Dominik

einen kleinen Beitrag so geschrieben.

Dominik

Achso,

Jochen

Ja, das ist aber

Jochen

sozusagen nur quasi, wenn man

Jochen

andere APIs abfragt, das ist natürlich auch

Jochen

ein Anwendungsfall für iSync, genau, weil eben man

Jochen

dann halt nur auf den, die Zeit,

Jochen

die Latenz ist nur die Zeit, die

Jochen

der längst laufende Request braucht und nicht mehr,

Jochen

wenn man das synchron abfragt, halt

Jochen

alle aufsummiert.

Jochen

Und genau, aber es wäre ja auch sozusagen,

Jochen

wenn diese Dinge, die man

Jochen

fragt, interne andere API-Endpoints sind

Jochen

und man dann irgendwie noch eine Transformation drauf

Jochen

macht und das dann rausschickt, dann...

Jochen

Microservices.

Jochen

Ja.

Jochen

Buzzword.

Jochen

Bingo.

Jochen

Meine

Johannes

Consulting-Kosten

Johannes

haben sich eben verdoppelt.

Johannes

Ja, wobei

Jochen

Microservice-Integration würde

Jochen

ich ehrlich gesagt auch nicht unbedingt

Jochen

über REST oder

Jochen

HTTP machen.

Jochen

Ich weiß nicht, wie der das zum Neuesten macht.

Jochen

Sondern über was? Wahrscheinlich über eine

Jochen

Message-Queue.

Jochen

einfach deswegen, weil du dann zum Beispiel

Jochen

weil du eben, ja und

Jochen

weil du bei HTTP hast du halt diesen Overhead

Jochen

immer der Verbindung, die du aufmachen musst und

Jochen

den

Jochen

Ja gut, dann kriegst du ja mit Techniken weg.

Jochen

Ja und intern

Jochen

musst du dann vielleicht auch nicht immer authentifizieren und sowas

Jochen

aber

Jochen

ja

Jochen

Ja okay, wie auch immer.

Jochen

Darauf müssen wir auch nochmal was anderes sagen.

Jochen

Du wolltest noch was anderes sagen?

Jochen

Genau, also das wäre halt vielleicht

Jochen

ein Ding,

Jochen

wie man sozusagen damit

Jochen

umgehen könnte, dass

Jochen

man ansonsten

Jochen

eine Explosion von Endpunkten hat

Jochen

und ganz viele Abfragen machen muss,

Jochen

wenn man bei REST im Vergleich

Jochen

zu UDFDL. Aber

Jochen

ja.

Jochen

Okay. Keine Ahnung.

Jochen

Ja, okay.

Jochen

Ich würde sagen, wir haben ziemlich viel bei REST heute gesprochen.

Jochen

Habt ihr noch irgendwas auf eurer Liste,

Dominik

was ihr noch losen werden wollt heute? Weil sonst würde ich

Dominik

nämlich sagen,

Dominik

Nee, ich hab sonst auch nichts mehr.

Dominik

Ich fand's schön, viel wieder gelernt.

Dominik

Ich hoffe, ihr bleibt uns

Dominik

weiter gewogen, hört uns weiter und

Dominik

schreibt uns eure Fake, eure Lobhass-Kommentare,

Dominik

alles, was ihr loswerden

Dominik

wollt an hallo.peisenpodcast.de

Dominik

Schön, dass ihr

Dominik

wieder eingeschaltet habt. Vielen Dank,

Dominik

dass ihr wieder alle dabei wart. Vielen Dank, Johannes.

Dominik

Und

Dominik

ja, hört uns das

Dominik

nächstes Mal wieder. Alles klar.

Dominik

Bis dann. Bis zum nächsten Mal. Jo, tschüss.

Dominik

Wir haben die Pics vergessen. Na, machen wir dann

Dominik

heute nicht.

Dominik

Tschö, tschö.