WEBVTT

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

00:00:05.200 --> 00:00:09.900
Wir machen heute REST, Representational State Transfer.

00:00:11.360 --> 00:00:16.360
Was ist das eigentlich? Und hier ist der Dominik und ich bin da mit dem Jochen und heute wieder mit dem Johannes.

00:00:16.560 --> 00:00:18.460
Hallo, Glück! Hallo Johannes, hallo.

00:00:18.780 --> 00:00:22.320
Ihr kennt uns ja vielleicht schon, wenn ihr gehört habt, wir waren öfter schon mal in dieser Konstellation.

00:00:22.980 --> 00:00:26.540
Das heißt, wir stellen uns heute nicht vor. Aber wie gesagt, wir machen REST, Representational State Transfer.

00:00:26.540 --> 00:00:27.600
und

00:00:27.600 --> 00:00:30.720
ja, den frage ich dann zuerst, was ist denn das?

00:00:31.180 --> 00:00:32.460
Ja, ich dachte, wir wollen nicht

00:00:32.460 --> 00:00:34.220
vielleicht zuerst ein News machen, weil ich habe da auch noch so ein paar Sachen...

00:00:34.220 --> 00:00:36.460
Nein, nein, wir wollen erst mal kurz das Topic erklären und dann machen wir News.

00:00:37.300 --> 00:00:38.660
Oh, da kommen wir nicht mehr zu den News.

00:00:39.000 --> 00:00:40.400
Doch, die kommen noch zu den News.

00:00:40.400 --> 00:00:41.780
Na gut, okay, machen wir es jetzt andersrum.

00:00:41.780 --> 00:00:44.420
Erklär mal ganz kurz, was REST ist. Aber nur ganz kurz.

00:00:44.660 --> 00:00:47.240
Ja, das ist Elevator-Fischung.

00:00:49.540 --> 00:00:49.860
Also,

00:00:50.380 --> 00:00:52.440
man stellt sich vor, man hätte da so eine Dampfmaschine.

00:00:52.580 --> 00:00:53.100
Ne, warte mal.

00:00:53.860 --> 00:00:56.040
Also, REST ist,

00:00:56.040 --> 00:01:03.100
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.

00:01:04.120 --> 00:01:07.060
Das ist ja mal krass.

00:01:07.640 --> 00:01:08.640
Genau, das ist das Web.

00:01:09.560 --> 00:01:12.720
Dann hat man dann so einen Browser und das ist eigentlich Rest.

00:01:13.140 --> 00:01:15.360
Also das Web ist schon Rest.

00:01:16.120 --> 00:01:16.320
Okay.

00:01:16.800 --> 00:01:17.360
Okay, News.

00:01:19.480 --> 00:01:21.220
Ich erkläre das immer anders.

00:01:21.360 --> 00:01:24.420
Ich erkläre das immer im Unterschied zu dem, was es nicht ist.

00:01:24.420 --> 00:01:26.340
und was man früher gemacht hat, um

00:01:26.340 --> 00:01:28.280
APIs zu machen, war LPC,

00:01:28.460 --> 00:01:29.460
Remote Procedure Call,

00:01:30.320 --> 00:01:32.480
wo man halt Funktionen hatte, die man aufgerufen hat

00:01:32.480 --> 00:01:34.280
mit irgendwelchen Daten. Und REST

00:01:34.280 --> 00:01:36.400
ist jetzt eben nicht Funktionen, die man aufruft,

00:01:36.460 --> 00:01:38.420
sondern Objekte, die man abruft und verändert.

00:01:39.280 --> 00:01:39.540
Und

00:01:39.540 --> 00:01:42.200
das ist für mich so der Knackpunkt, was

00:01:42.200 --> 00:01:43.800
REST zu REST macht.

00:01:44.280 --> 00:01:46.380
Dass man nicht Funktionen aufruft, sondern

00:01:46.380 --> 00:01:47.080
Objekte

00:01:47.080 --> 00:01:49.600
abruft und verändert.

00:01:50.100 --> 00:01:51.620
Jetzt suchen wir das Objekt News ab.

00:01:52.440 --> 00:01:53.600
Jetzt machen wir News?

00:01:53.760 --> 00:01:54.340
Ja, jetzt machen wir News.

00:01:54.420 --> 00:01:55.660
Gut, okay, machen wir ein News.

00:01:57.260 --> 00:01:58.140
Python 3.9.2.

00:01:58.160 --> 00:01:58.780
Pattern Matching.

00:01:58.980 --> 00:02:02.800
Genau, Pattern Matching ist auch tatsächlich der erste Punkt, den ich auf der Liste habe.

00:02:03.180 --> 00:02:04.460
Alle anderen Punkte sind unwichtig.

00:02:04.560 --> 00:02:05.280
Pattern Matching.

00:02:06.200 --> 00:02:07.260
Case, Switch, Case.

00:02:07.380 --> 00:02:10.280
Hast du da eigentlich dir schon mal Gedanken gemacht über Pattern Matching?

00:02:10.840 --> 00:02:12.100
Nur ganz am Rande.

00:02:12.300 --> 00:02:17.940
Ich fand das so gut, dass ich direkt einen Blogartikel auf meinen selten benutztes Blog geschrieben habe,

00:02:17.940 --> 00:02:21.960
weil das so wichtig ist und so toll, dass ich, ja klar, kriegt ihr natürlich einen Link dazu.

00:02:21.960 --> 00:02:25.720
dass ich das sofort schreiben musste

00:02:25.720 --> 00:02:26.960
und

00:02:26.960 --> 00:02:30.160
Pattern Matching ist so ein Feature

00:02:30.160 --> 00:02:31.720
was es in anderen Sprachen

00:02:31.720 --> 00:02:33.660
in vielen funktionalen Sprachen gibt

00:02:33.660 --> 00:02:35.540
was man auch da kennt

00:02:35.540 --> 00:02:38.400
und wenn man das einmal gesehen hat, dann kann man nicht mehr ohne

00:02:38.400 --> 00:02:39.560
und

00:02:39.560 --> 00:02:41.680
ich habe früher an der Uni

00:02:41.680 --> 00:02:43.700
funktionales Programmieren gelernt und gemacht

00:02:43.700 --> 00:02:46.300
und war dann etwas schockiert als ich zu Python

00:02:46.300 --> 00:02:47.360
kam und die hatten das nicht

00:02:47.360 --> 00:02:50.280
und habe es aber irgendwann vergessen, dass es das in Python

00:02:50.280 --> 00:02:50.620
nicht gibt

00:02:50.620 --> 00:02:52.760
und jetzt gibt es es irgendwann

00:02:52.760 --> 00:02:53.320
endlich wieder.

00:02:54.280 --> 00:02:56.460
Ja, aber es gibt doch If-Else, warum brauche ich denn dann ein

00:02:56.460 --> 00:02:58.600
Switchcase? Ja, das ist prinzipiell

00:02:58.600 --> 00:03:00.580
richtig, man kann das alles mit If-Else machen,

00:03:01.200 --> 00:03:02.640
man kann auch prinzipiell jede Schleife

00:03:02.640 --> 00:03:04.500
aus While-Loops machen, man kann prinzipiell

00:03:04.500 --> 00:03:06.040
auch alles aus Goto zusammenbauen,

00:03:07.000 --> 00:03:08.500
man macht es nicht, weil es nicht

00:03:08.500 --> 00:03:10.460
gut ist und

00:03:10.460 --> 00:03:12.560
weil es bequemere Dinge

00:03:12.560 --> 00:03:14.760
gibt. Und gerade jetzt das Pattern-Matching,

00:03:14.880 --> 00:03:16.100
was in Python reinkommt, ist

00:03:16.100 --> 00:03:18.220
meiner Meinung nach ein sehr mächtiges Pattern-Matching.

00:03:18.880 --> 00:03:20.420
Die können matchen auf Typen und

00:03:20.420 --> 00:03:22.660
auf Werte und die können Variable Capture

00:03:22.660 --> 00:03:22.960
machen,

00:03:24.380 --> 00:03:26.500
wo eben so ganz komplizierte

00:03:26.500 --> 00:03:28.520
Fälle, die ein

00:03:28.520 --> 00:03:29.680
sehr langes If wären,

00:03:30.100 --> 00:03:32.360
dann auf einmal sehr einfach zu

00:03:32.360 --> 00:03:34.080
schreiben. Was ist ein Variable Capture?

00:03:36.180 --> 00:03:36.700
Was

00:03:36.700 --> 00:03:38.300
Pattern Matching macht, ist

00:03:38.300 --> 00:03:40.160
im Wesentlichen ein If, wo ich nicht

00:03:40.160 --> 00:03:42.340
hinschreibe, dass eine Bedingung wahr oder

00:03:42.340 --> 00:03:44.380
falsch ist, sondern ich

00:03:44.380 --> 00:03:45.740
schreibe eine Datenstruktur hin.

00:03:46.540 --> 00:03:48.100
Und wenn diese Datenstruktur

00:03:48.100 --> 00:03:50.080
vorgefunden wird,

00:03:50.420 --> 00:03:53.320
dann trifft dieses Pattern zu.

00:03:55.080 --> 00:04:00.960
Die erste coole Sache, die da passiert ist, dass man nicht mehr irgendwelche Dictionaries .get machen muss

00:04:00.960 --> 00:04:05.480
oder irgendwelche Listen gucken muss, ob die Länge größer 0 ist und dann das erste Element rausholen

00:04:05.480 --> 00:04:12.500
sondern man schreibt einfach hin, aus der Liste, das erste Element soll ein Attribut haben x

00:04:12.500 --> 00:04:16.080
und das soll den Wert y haben.

00:04:16.080 --> 00:04:19.740
Und wenn diese Struktur zutrifft, dann ist dieses Pattern gematcht.

00:04:20.420 --> 00:04:26.080
Ich habe in dem eben genannten Blogartikel ein Beispiel, wo es sehr eindeutig wird.

00:04:26.740 --> 00:04:39.660
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.

00:04:40.420 --> 00:04:47.660
Und wenn diese Variablen Namen gefüllt werden können, dann stehen die mir in dem Branch, der dann aufgerufen wird, zur Verfügung.

00:04:47.660 --> 00:05:07.300
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, also es ist schon gecastet.

00:05:07.880 --> 00:05:13.280
Und das heißt Variable Capture, weil eben diese Variable sozusagen aus diesem Muster raus eingefangen wird.

00:05:13.940 --> 00:05:17.000
Das klingt sehr nützlich und wenn man das auch mit Typen und so machen kann.

00:05:17.660 --> 00:05:40.840
Das klingt, das ist super nützlich. Gerade das erste Beispiel, was man da sieht, ist eben diese Typen. 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 oder case dr, dann ist es ein dr. Das ist so viel einfacher, als das mit ifs zu machen. Das ist sehr, sehr schön.

00:05:41.000 --> 00:05:43.860
Ja, fand ich auch. Es gab aber viel Gegenstimmen, muss ich sagen.

00:05:43.860 --> 00:05:45.840
Ja, es gab ganz schön Gegenwind.

00:05:45.920 --> 00:05:47.760
Es gibt ja schon seit einiger Zeit irgendwie Leute, denen

00:05:47.760 --> 00:05:49.700
das alles kompliziert wird und ich meine,

00:05:50.180 --> 00:05:51.540
da gab es ja auch diese große Kontroverse

00:05:51.540 --> 00:05:53.540
beim Walrus

00:05:53.540 --> 00:05:54.920
Operator.

00:05:56.600 --> 00:05:57.720
Ja, auch bei den Typen,

00:05:57.940 --> 00:06:00.140
bei den Type Annotations.

00:06:00.360 --> 00:06:01.800
Ja, aber die sind auch, 3.10 ist

00:06:01.800 --> 00:06:03.160
doch irgendwie so eine Muss-Version, oder?

00:06:03.540 --> 00:06:05.380
Das ist nicht so eine Kann-Version, was da alles kommt. Also die

00:06:05.380 --> 00:06:07.760
Type Annotations, die dabei sind, dass man einfach

00:06:07.760 --> 00:06:09.500
hinter schreiben kann, die Klasse

00:06:09.500 --> 00:06:11.320
beispielsweise, die das sein soll oder

00:06:11.320 --> 00:06:13.360
deren Instanz das sein soll, ohne

00:06:13.360 --> 00:06:15.700
dass man da groß Typer importiert

00:06:15.700 --> 00:06:17.440
und dann kann man so einen Union Operator dahinter

00:06:17.440 --> 00:06:18.220
setzen, also diesen

00:06:18.220 --> 00:06:21.400
und dann kann man da zwei

00:06:21.400 --> 00:06:23.360
verschiedene Typen haben und so, das sieht alles

00:06:23.360 --> 00:06:25.320
total schick aus, also ich finde, so wollte ich das

00:06:25.320 --> 00:06:26.660
schon immer lesen

00:06:26.660 --> 00:06:29.360
Ja, also ich weiß

00:06:29.360 --> 00:06:31.040
nicht so genau, ich meine, bei denen, ich finde das

00:06:31.040 --> 00:06:32.880
diese Type Annotations

00:06:32.880 --> 00:06:35.400
die sind halt an manchen Stellen total nett

00:06:35.400 --> 00:06:39.480
ob ich das jetzt an allen Stellen

00:06:39.480 --> 00:06:41.300
im Code gerne hätte, weiß ich jetzt auch nicht

00:06:41.300 --> 00:06:42.640
Das ist ja das Schöne

00:06:42.640 --> 00:06:43.060
Genau, genau.

00:06:44.880 --> 00:06:47.000
Und da, wo es halt Sinn macht,

00:06:47.320 --> 00:06:48.740
da kann man es dann halt dazu tun

00:06:48.740 --> 00:06:50.640
und dann ist es auch nett. Ich finde auch tatsächlich,

00:06:50.980 --> 00:06:52.540
das mache ich in letzter Zeit häufiger,

00:06:53.220 --> 00:06:54.200
entweder

00:06:54.200 --> 00:06:55.060
Dataclasses,

00:06:55.280 --> 00:06:58.800
oder Pydentic verwenden

00:06:58.800 --> 00:07:00.880
und tatsächlich Klassen

00:07:00.880 --> 00:07:02.360
so hinzuschreiben, ist deutlich

00:07:02.360 --> 00:07:04.740
angenehmer als das irgendwie...

00:07:04.740 --> 00:07:05.760
Hatten wir Pydentic schon mal?

00:07:05.760 --> 00:07:07.740
Ja, ich weiß nicht genau,

00:07:07.800 --> 00:07:09.700
ob ich es mal gepickt hatte

00:07:09.700 --> 00:07:11.120
oder so. Kann sein.

00:07:11.120 --> 00:07:12.320
Was macht Pydentic?

00:07:12.440 --> 00:07:14.380
Du hast es auf jeden Fall mal erwähnt, glaube ich.

00:07:15.220 --> 00:07:16.980
Verlinke es auf jeden Fall nochmal, das ist ziemlich cool.

00:07:17.160 --> 00:07:18.960
Ja, genau.

00:07:20.240 --> 00:07:21.260
Ja, und also ich finde

00:07:21.260 --> 00:07:21.580
die

00:07:21.580 --> 00:07:24.240
diese Art

00:07:24.240 --> 00:07:27.020
sozusagen das Klassen hinzuschreiben

00:07:27.020 --> 00:07:28.700
sowieso irgendwie macht irgendwie

00:07:28.700 --> 00:07:31.100
nett. Ich sehe, ich habe auch schon

00:07:31.100 --> 00:07:33.280
irgendwie hier in Pydentic in der Doku mal rumgewühlt.

00:07:33.500 --> 00:07:34.580
Also eigentlich wollte ich wissen, was das ist.

00:07:36.200 --> 00:07:37.100
Ja, das ist so

00:07:37.100 --> 00:07:38.980
eine Art Mischung aus

00:07:38.980 --> 00:07:41.080
MyPy und Dataclasses, oder?

00:07:41.120 --> 00:07:44.000
Man kann leicht Datentypen definieren

00:07:44.000 --> 00:07:46.040
mit bestimmten Typen und der prüft die dann auch noch

00:07:46.040 --> 00:07:47.980
Genau, also es prüft

00:07:47.980 --> 00:07:49.380
es halt auch zur Laufzeit

00:07:49.380 --> 00:07:51.920
und es ist halt auch so, dass man dann

00:07:51.920 --> 00:07:53.740
halt so eine eingebaute Serialisierung nach

00:07:53.740 --> 00:07:55.920
JSON oder so auch mitkriegt, weswegen

00:07:55.920 --> 00:07:58.400
man es eigentlich auch super für so REST-Geschichten

00:07:58.400 --> 00:07:59.400
verwenden kann

00:07:59.400 --> 00:08:00.660
REST?

00:08:00.660 --> 00:08:02.100
REST ist das denn, Jochen?

00:08:02.800 --> 00:08:03.360
Ja, Moment

00:08:03.360 --> 00:08:05.200
Erstmal die Reste der News, bitte

00:08:05.200 --> 00:08:09.940
Was haben wir denn da noch?

00:08:09.940 --> 00:08:12.340
so ein Pattern Matching

00:08:12.340 --> 00:08:14.340
ja, coole Sachen, da sind wir uns alle einig

00:08:14.340 --> 00:08:15.720
irgendwie komisch, naja

00:08:15.720 --> 00:08:18.560
es gibt neue Releases von

00:08:18.560 --> 00:08:20.140
UV Loop und Async PG

00:08:20.140 --> 00:08:22.540
und so, aber

00:08:22.540 --> 00:08:24.460
da war jetzt auch nichts weltbewegendes dabei

00:08:24.460 --> 00:08:26.800
aber Async PG ist auch so ein Ding

00:08:26.800 --> 00:08:28.060
was man sich unbedingt mal angucken kann

00:08:28.060 --> 00:08:29.720
wovon hast du gerade gesprochen?

00:08:30.140 --> 00:08:32.700
ja, UV Loop ist halt so eine schnelle

00:08:32.700 --> 00:08:33.820
also ist die

00:08:33.820 --> 00:08:36.340
Python-Version oder

00:08:36.340 --> 00:08:38.360
Abstraktionen-Drapper

00:08:38.360 --> 00:08:41.020
um LibUV und das ist eine super schnelle

00:08:41.020 --> 00:08:44.260
Abstraktion über

00:08:44.260 --> 00:08:45.480
die ganzen

00:08:45.480 --> 00:08:48.540
betriebssystemspezifischen Schnittstellen,

00:08:48.640 --> 00:08:50.480
sowas wie EpoL oder KQ oder

00:08:50.480 --> 00:08:51.620
was weiß ich nicht, was da sonst so.

00:08:52.540 --> 00:08:54.040
TCP Completion Ports oder

00:08:54.040 --> 00:08:56.280
I.O. Completion Ports.

00:08:56.360 --> 00:08:58.500
Ich glaube, das ist mehr Stuff

00:08:58.500 --> 00:09:00.100
für die Web-Server-Folge, die wir immer machen.

00:09:00.140 --> 00:09:02.360
Ja, genau, aber auf jeden Fall,

00:09:02.400 --> 00:09:04.200
man kann damit schnell I.O. machen

00:09:04.200 --> 00:09:06.340
und das Ganze halt in der

00:09:06.340 --> 00:09:08.300
Event-Loop und das ist auch das, was unter Node.js

00:09:08.300 --> 00:09:10.420
zum Beispiel darunter liegt. Und genau

00:09:10.420 --> 00:09:12.400
davon gab es jetzt gerade eine neue Version und

00:09:12.400 --> 00:09:14.340
Async-PG

00:09:14.340 --> 00:09:16.180
ist halt ein Async

00:09:16.180 --> 00:09:18.320
Library,

00:09:18.600 --> 00:09:20.400
um halt auf Postgres zuzugreifen und das ist halt

00:09:20.400 --> 00:09:21.400
auch sehr praktisch, weil also

00:09:21.400 --> 00:09:24.080
das normale Psycho-PG,

00:09:24.300 --> 00:09:26.180
das man so verwendet, kann das halt nicht und

00:09:26.180 --> 00:09:28.320
eigentlich wäre das ja auch saukool, wenn man das

00:09:28.320 --> 00:09:30.240
Async machen könnte und Async-PG ist auch

00:09:30.240 --> 00:09:32.260
richtig schnell. Async auf Datenbank

00:09:32.260 --> 00:09:34.320
stelle ich mir schwierig vor mit Transaktionen und so, weil

00:09:34.320 --> 00:09:36.300
Nö, das ist alles, eigentlich

00:09:36.300 --> 00:09:37.760
ist das überhaupt kein Problem. Also

00:09:37.760 --> 00:09:40.440
Es gibt halt nur einen Warenzustand dann immer

00:09:40.440 --> 00:09:41.120
und das ist egal

00:09:41.120 --> 00:09:43.420
Du kannst ja auch sonst auch

00:09:43.420 --> 00:09:46.180
Du kannst ja schon mehrere Sachen gleichzeitig machen

00:09:46.180 --> 00:09:47.640
Nur ist es halt so, dass du normalerweise

00:09:47.640 --> 00:09:49.240
dann halt warten musst

00:09:49.240 --> 00:09:49.900
Du schickst halt irgendwie

00:09:49.900 --> 00:09:53.800
Es fällt immer an die Datenbank und dann blockierst du halt

00:09:53.800 --> 00:09:54.240
ein Code

00:09:54.240 --> 00:09:55.880
Du machst es halt synchron

00:09:55.880 --> 00:09:58.760
Das ändert nicht die Datenbank, Dominik

00:09:58.760 --> 00:10:01.260
Sondern es ändert nur, wie du die Verbindung der Datenbank hältst

00:10:01.260 --> 00:10:01.380
Ja

00:10:01.380 --> 00:10:05.460
Aber wo wir gerade bei PsychoPG sind

00:10:05.460 --> 00:10:07.240
PsychoPG3 ist angekündigt

00:10:07.240 --> 00:10:09.360
und was du gerade unterwegs

00:10:09.360 --> 00:10:11.300
die koordinieren sich

00:10:11.300 --> 00:10:13.300
gerade mit den Django-Leuten,

00:10:13.460 --> 00:10:15.040
dass die Datenbankverbindungen da

00:10:15.040 --> 00:10:16.640
cooler sind. Die haben zum Beispiel

00:10:16.640 --> 00:10:18.880
Connection-Pooling im Adapter drin.

00:10:19.100 --> 00:10:21.000
Das ist auch eine sehr schöne, da hatte ich jetzt letztens

00:10:21.000 --> 00:10:22.920
so ein Problem tatsächlich auch,

00:10:23.540 --> 00:10:25.140
dass irgendwie die Connections rausgelegt

00:10:25.140 --> 00:10:27.220
sind. Bei Django gibt es glaube ich

00:10:27.220 --> 00:10:29.000
im Grunde zwei Arten, entweder

00:10:29.000 --> 00:10:30.960
man macht halt eine Verbindung pro Request oder man

00:10:30.960 --> 00:10:32.820
setzt halt das auf irgendeine Zeit oder so

00:10:32.820 --> 00:10:34.540
und dann wird die Connection so lange aufgehalten.

00:10:35.840 --> 00:10:37.080
Aber, und das war mir halt nicht so

00:10:37.080 --> 00:11:07.060
und Jochen unterhalten sich über die Programmiersprache Python

00:11:07.080 --> 00:11:08.320
Ja

00:11:08.320 --> 00:11:12.960
Ja, aber Pooling wäre auf jeden Fall

00:11:12.960 --> 00:11:14.920
eine schöne Geschichte, weil manchmal ist ja auch

00:11:14.920 --> 00:11:16.320
eine Verbindung nicht genug

00:11:16.320 --> 00:11:19.040
Ja, und generell

00:11:19.040 --> 00:11:20.980
ist es ja gut, wenn da ein paar Verbindungen

00:11:20.980 --> 00:11:22.500
offen sind, weil man braucht die halt doch

00:11:22.500 --> 00:11:24.160
häufig

00:11:24.160 --> 00:11:29.060
Ja, ansonsten, was hatte ich noch gelesen?

00:11:29.220 --> 00:11:30.940
Es gab irgendwie einen Artikel

00:11:30.940 --> 00:11:32.280
zu Security-Geschichten

00:11:32.280 --> 00:11:35.060
Dependency-Conclusion

00:11:35.060 --> 00:11:35.980
Ich weiß nicht, ob ihr den auch gelesen habt

00:11:35.980 --> 00:11:37.300
Gab es einen Artikel zu?

00:11:37.700 --> 00:11:39.040
Es gab da schon ein paar Artikel zu.

00:11:41.840 --> 00:11:42.740
Dependency Confusion.

00:11:42.880 --> 00:11:44.840
Ja, sehr deprimierendes Problem, ehrlich gesagt.

00:11:45.460 --> 00:11:47.160
Das musst du aber denken, was ist Dependency Confusion?

00:11:48.460 --> 00:11:49.420
Ja, da gab es doch so ein,

00:11:49.500 --> 00:11:51.940
da hat doch eine dreieinhalbtausend Sachen bei PyPy hochgeladen, oder?

00:11:52.140 --> 00:11:52.400
Ja.

00:11:54.560 --> 00:11:55.760
Und genau,

00:11:56.040 --> 00:11:57.380
das ist halt so, oft,

00:11:57.380 --> 00:11:59.440
wenn da Leute die Version,

00:11:59.540 --> 00:12:01.120
die sie haben wollen, nicht explizit festlegen,

00:12:02.100 --> 00:12:03.520
dann muss man halt nur eine Version

00:12:03.520 --> 00:12:05.140
haben, die ein bisschen höher ist.

00:12:05.140 --> 00:12:07.500
oder wenn sie sich vertippen

00:12:07.500 --> 00:12:07.700
genau

00:12:07.700 --> 00:12:11.060
dann kann man das sozusagen hijacken

00:12:11.060 --> 00:12:12.760
und dann kann man den Software installieren

00:12:12.760 --> 00:12:15.540
die auch im Großen und Ganzen

00:12:15.540 --> 00:12:17.080
das tut, was sie erwartet haben

00:12:17.080 --> 00:12:19.040
was sie sich installieren wollten, aber halt auch

00:12:19.040 --> 00:12:20.060
vielleicht ein bisschen mehr oder so

00:12:20.060 --> 00:12:23.080
Also ein Beispiel wäre, wenn

00:12:23.080 --> 00:12:25.060
zum Beispiel jemand eine Bibliothek hochlädt, die

00:12:25.060 --> 00:12:27.000
Django heißt, nur ohne D vorne dran

00:12:27.000 --> 00:12:29.200
und wenn

00:12:29.200 --> 00:12:31.260
jemand halt dann Django installiert, das geht auch

00:12:31.260 --> 00:12:33.380
hat auch die gleichen Versionen, aber

00:12:33.380 --> 00:12:36.480
und macht halt gleichzeitig Bitcoin-Mining oder sonst irgendwas.

00:12:36.740 --> 00:12:38.540
Oder Backdoors auf oder sonst irgendwas.

00:12:38.620 --> 00:12:39.300
Man weiß es nicht genau.

00:12:39.380 --> 00:12:44.560
Und da gab es eben so einen Vorfall, dass jemand 3.500 solche Bibliotheken auf PyPI hochgeladen hat,

00:12:45.320 --> 00:12:49.140
die sehr suspicious waren und die dann auch wieder gelöscht wurden.

00:12:50.180 --> 00:12:53.600
Ja, also der Artikel, den ich da gelesen hatte, derjenige, der das gemacht hat,

00:12:53.760 --> 00:12:56.860
der hat das tatsächlich quasi auch im Auftrag von größeren Firmen gemacht.

00:12:57.740 --> 00:13:00.180
Und der hat damit quasi alle großen Firmen aufgemacht.

00:13:00.180 --> 00:13:02.560
und hat da auch überall

00:13:02.560 --> 00:13:03.540
quasi das

00:13:03.540 --> 00:13:06.660
Preisgeld dafür gekriegt,

00:13:06.740 --> 00:13:07.480
die man halt für

00:13:07.480 --> 00:13:09.160
Millionenweise.

00:13:10.140 --> 00:13:11.760
Also das hat sich gelohnt.

00:13:14.880 --> 00:13:16.600
Und das ist auch wirklich ein fieses Problem

00:13:16.600 --> 00:13:18.080
und es gibt eigentlich nicht so,

00:13:18.200 --> 00:13:19.560
es ist so ein bisschen doof.

00:13:19.980 --> 00:13:21.440
Poetry könnte doch helfen, oder?

00:13:21.500 --> 00:13:23.620
Wenn ich jetzt irgendwie die Hashes von Independent ziehe damit.

00:13:23.740 --> 00:13:24.280
Nein, leider nicht.

00:13:24.280 --> 00:13:25.220
Nein, warum?

00:13:25.580 --> 00:13:28.440
Weil du ja immer noch den Namen eingeben musst

00:13:28.440 --> 00:13:28.780
irgendwann.

00:13:28.780 --> 00:13:30.920
Ja, aber wenn das bei einer

00:13:30.920 --> 00:13:33.220
PyProject-Hummel schon gepinnt ist, richtig

00:13:33.220 --> 00:13:35.580
Dann hoffe ich mal, dass du

00:13:35.580 --> 00:13:37.760
die richtige gepinnt hast

00:13:37.760 --> 00:13:39.580
Zum ersten Mal muss ich aufpassen, wenn ich das

00:13:39.580 --> 00:13:40.580
eintrage, aber

00:13:40.580 --> 00:13:43.000
Und jemand muss aufpassen

00:13:43.000 --> 00:13:45.780
Was meinst du mit jemand?

00:13:46.600 --> 00:13:48.020
Ja, du siehst es ja nicht, du merkst es ja nicht

00:13:48.020 --> 00:13:48.600
Das geht ja

00:13:48.600 --> 00:13:51.900
Das funktioniert ja, das macht ja genau das, was es soll

00:13:51.900 --> 00:13:53.560
Nur halt irgendwann

00:13:53.560 --> 00:13:54.560
auch noch was anderes

00:13:54.560 --> 00:13:57.640
Und wenn du nicht gerade dann drauf guckst

00:13:57.640 --> 00:14:01.480
Das ist ja immer das Problem mit irgendwelchen Dependencies, also wenn man irgendwie

00:14:01.480 --> 00:14:05.540
sich sowas wie PyPy auf den Rechner holt oder Node.js

00:14:05.540 --> 00:14:09.420
oder was auch immer und irgendwelche Pakete von irgendwo installiert, ohne genau zu wissen,

00:14:09.860 --> 00:14:13.460
was für ein Source Code denn da drin steckt oder jedes Mal nachzugucken, ob denn da in der

00:14:13.460 --> 00:14:16.400
neuen Version vielleicht was Falsches drin ist, dann

00:14:16.400 --> 00:14:21.480
Ja, das Problem haben wir an vielen Stellen, das haben wir natürlich auch bei Docker zum Beispiel, wenn man sich da irgendwelche

00:14:21.480 --> 00:14:25.500
Images sieht, wo man nicht weiß, was da drin ist. Das Problem haben wir auch bei Distributionen, aber jetzt wenn man

00:14:25.500 --> 00:14:27.660
eine Distribution nimmt und man installiert

00:14:27.660 --> 00:14:29.220
per Apt irgendwas bei Debian oder so,

00:14:29.980 --> 00:14:31.920
dann kann man

00:14:31.920 --> 00:14:33.720
ja davon ausgehen, wenn man jetzt nicht, was natürlich

00:14:33.720 --> 00:14:35.800
auch viele Leute machen, was natürlich auch wieder so ein Ding ist,

00:14:35.860 --> 00:14:38.220
wo man sich sagen kann, aus Sicherheitsperspektive

00:14:38.220 --> 00:14:39.940
ist das ganz übel, wenn man da halt

00:14:39.940 --> 00:14:41.900
irgendwelche Dritt-Repositories

00:14:41.900 --> 00:14:44.400
sich reinholt,

00:14:44.540 --> 00:14:45.700
kann man auch alles installieren.

00:14:45.860 --> 00:14:47.740
Das ist den meisten Leuten vielleicht auch nicht so ganz klar.

00:14:48.960 --> 00:14:49.880
Aber wenn man jetzt nur

00:14:49.880 --> 00:14:52.280
die Debian-Repositories

00:14:52.280 --> 00:14:53.920
drin hat, dann kann man ja davon ausgehen,

00:14:53.920 --> 00:14:55.960
okay, das hat irgendeiner, der das maintained,

00:14:56.020 --> 00:14:57.860
hat sich das angeguckt, hat geguckt, ob das die richtige

00:14:57.860 --> 00:14:59.400
Software ist, hat daraus ein Paket gebaut,

00:14:59.980 --> 00:15:01.880
hat das Ganze signiert und so und dann kann man sich

00:15:01.880 --> 00:15:03.980
schon relativ sicher sein, okay, das, was da landet,

00:15:04.500 --> 00:15:05.400
ist tatsächlich nicht irgendeine

00:15:05.400 --> 00:15:07.820
Malware oder so. Aber welche

00:15:07.820 --> 00:15:08.940
Python-Version haben die gerade?

00:15:09.780 --> 00:15:12.160
Genau, das ist

00:15:12.160 --> 00:15:12.760
das Problem.

00:15:14.040 --> 00:15:15.820
Und diese ganzen Bibliotheken musst

00:15:15.820 --> 00:15:17.860
ja dann auch, du kannst ja dann nicht mit Pip irgendwas installieren,

00:15:17.960 --> 00:15:19.880
sondern musst ja dann eigentlich. Und ich

00:15:19.880 --> 00:15:21.880
kenne solche Firmen, ich habe Kunden

00:15:21.880 --> 00:15:23.780
gehabt, die das gesagt haben, wir wollen

00:15:23.780 --> 00:15:28.020
keine Dependencies reinholen von irgendwoher, sondern wir wollen die Betriebssystempakete

00:15:28.020 --> 00:15:30.340
haben und dann hast du ein echtes Problem. Ja, dann haben die doch keine Software mehr.

00:15:30.700 --> 00:15:35.760
Viele, viele Sachen. Ja, bist halt bei Django 2. irgendwas. 1. 2.0.

00:15:37.100 --> 00:15:39.640
Ja, aber ist doch Quatsch. Also dann mache ich doch lieber irgendeinen Server auf, der vielleicht

00:15:39.640 --> 00:15:43.680
kompromittiert werden kann und mache dann andere Sachen sicher. Mache dann Singles

00:15:43.680 --> 00:15:47.640
Point of Truth oder sowas und dann habe ich halt die Daten abgesichert über eine Authentifizierung.

00:15:49.640 --> 00:15:51.660
Weiß nicht. Ja, an irgendeiner Stelle musst du

00:15:51.660 --> 00:15:53.100
irgendjemandem vertrauen und das ist

00:15:53.100 --> 00:15:55.740
ein Problem. Und selbst wenn es nur derselbe

00:15:55.740 --> 00:15:57.560
ist. Und das ist meistens der größte

00:15:57.560 --> 00:15:57.780
Fehler.

00:16:00.560 --> 00:16:01.560
Ja, aber zum

00:16:01.560 --> 00:16:03.560
Thema Sicherheit habe ich auch noch was sehr Interessantes gelernt.

00:16:04.920 --> 00:16:05.720
Ihr wisst ja sicherlich,

00:16:05.860 --> 00:16:07.480
alle die zuhören, wissen sicherlich, was

00:16:07.480 --> 00:16:08.140
COS ist.

00:16:08.800 --> 00:16:10.940
Cross Origin Requests

00:16:10.940 --> 00:16:13.400
Safety? Security?

00:16:16.980 --> 00:16:17.380
Oh,

00:16:17.520 --> 00:16:18.700
das ist eine gute Frage, weiß ich jetzt gar nicht.

00:16:20.140 --> 00:16:20.980
Ich weiß es auch nicht,

00:16:20.980 --> 00:16:22.100
aber ich weiß, dass es das gibt

00:16:22.100 --> 00:16:25.220
und ich weiß, dass das sehr gut ist, weil das bedeutet

00:16:25.220 --> 00:16:26.920
dass man nicht einfach irgendwoher

00:16:26.920 --> 00:16:28.120
Ressourcen abrufen kann

00:16:28.120 --> 00:16:30.440
Resource Sharing? Ah, okay

00:16:30.440 --> 00:16:32.760
Cross-Original Resource Sharing, okay

00:16:32.760 --> 00:16:35.280
Das gibt es

00:16:35.280 --> 00:16:37.320
nicht für Websockets, Websockets haben keinen Kurs

00:16:37.320 --> 00:16:38.880
Wenn ich einen Websocket

00:16:38.880 --> 00:16:41.280
irgendwo hin aufmache, dann kann ich darüber alles abrufen

00:16:41.280 --> 00:16:43.260
Oh

00:16:43.260 --> 00:16:44.800
Und das ist

00:16:44.800 --> 00:16:47.380
Ja, genau so habe ich auch reagiert

00:16:47.380 --> 00:16:49.240
Das war mir jetzt nicht klar

00:16:49.240 --> 00:16:49.820
Oh shit

00:16:49.820 --> 00:16:50.220
Aha!

00:16:56.760 --> 00:16:57.160
Genau.

00:16:57.660 --> 00:16:59.280
Also die Annahme ist, dass der

00:16:59.280 --> 00:17:01.500
Server das macht, dass der den Origin-Header

00:17:01.500 --> 00:17:02.780
überprüft und das dann halt ablehnt.

00:17:03.600 --> 00:17:05.520
Aber prinzipiell

00:17:05.520 --> 00:17:07.500
muss er das nicht. Im Prinzip kannst du eine Verbindung

00:17:07.500 --> 00:17:08.960
irgendwo hin aufmachen und sagen,

00:17:09.060 --> 00:17:11.020
ich bin der Websocket von so und so.

00:17:12.180 --> 00:17:13.080
Und ja.

00:17:13.420 --> 00:17:15.420
Also das ist doch so eine Sache, wenn das im Header drinstehen müsste,

00:17:16.160 --> 00:17:17.220
macht dann nicht sowas wie

00:17:17.220 --> 00:17:19.340
Django Channels sowas in den

00:17:19.340 --> 00:17:21.100
Headers mit...

00:17:21.100 --> 00:17:23.260
Das weiß ich nicht. Und das ist genau das Problem.

00:17:23.520 --> 00:17:25.200
Und es ist auch, glaube ich, nicht die Aufgabe von

00:17:25.200 --> 00:17:27.240
Channels, sondern es wäre eigentlich die

00:17:27.240 --> 00:17:29.160
Aufgabe von dem terminierenden Webserver.

00:17:29.300 --> 00:17:30.100
Und auch da

00:17:30.100 --> 00:17:33.320
weiß ich es nicht. Und weiß ich nicht, ist in der

00:17:33.320 --> 00:17:34.580
Sicherheitswelt...

00:17:34.580 --> 00:17:37.280
Das ist immer, wenn es

00:17:37.280 --> 00:17:38.800
so ganz überraschend und komisch ist,

00:17:38.880 --> 00:17:40.940
dann ist es kein gutes Zeichen.

00:17:42.000 --> 00:17:43.200
Auch da habe ich einen Link

00:17:43.200 --> 00:17:45.420
gefunden, der das alles erklärt

00:17:45.420 --> 00:17:46.460
und wie man damit umgeht und so weiter.

00:17:46.460 --> 00:17:48.100
Damit verlinken wir einfach.

00:17:48.100 --> 00:17:50.020
Aber ich habe zum Kurs was gelesen

00:17:50.020 --> 00:17:51.980
in Django REST Framework,

00:17:52.360 --> 00:17:54.280
weil die nämlich inklusive Sockets das integrieren

00:17:54.280 --> 00:17:54.880
wollen mit Kurs.

00:17:56.220 --> 00:17:57.400
Steht zumindest in dem Feature.

00:17:58.860 --> 00:18:00.380
Ja gut, dann überprüfen die das halt.

00:18:00.420 --> 00:18:01.080
Das ist ja sehr gut.

00:18:02.440 --> 00:18:04.240
Was uns zu unserem Topic

00:18:04.240 --> 00:18:06.140
drücken könnte, wenn ihr denn mit den News von so weit seid.

00:18:06.340 --> 00:18:07.180
Ja, das ist nicht mehr viel.

00:18:09.820 --> 00:18:10.180
Tatsächlich

00:18:10.180 --> 00:18:11.980
jetzt hatten wir auch schon mal, da waren wir ein bisschen

00:18:11.980 --> 00:18:14.040
voreilig, irgendwie hatten wir ja schon

00:18:14.040 --> 00:18:15.860
30 Jahre Python gefeiert, so der offizielle

00:18:15.860 --> 00:18:18.020
30 Jahre Dings, das war

00:18:18.020 --> 00:18:19.400
vorletzte Woche oder sowas.

00:18:19.800 --> 00:18:20.980
Letzte? Ich weiß nicht mehr genau.

00:18:21.500 --> 00:18:22.800
Da müsste man jetzt ein Glas Sekt aufmachen.

00:18:22.900 --> 00:18:23.740
Ja, müsste man jetzt eigentlich.

00:18:24.380 --> 00:18:26.940
Ja, ist jetzt Python offiziell 30 Jahre draußen.

00:18:28.240 --> 00:18:28.640
Hurra!

00:18:29.360 --> 00:18:31.180
Dann ist es ja älter als ich.

00:18:31.440 --> 00:18:32.440
Ich wollte sagen, genau.

00:18:35.020 --> 00:18:36.600
Ich hatte mir mein Geld geklaut.

00:18:37.500 --> 00:18:38.380
Entschuldigung, Dominik.

00:18:39.020 --> 00:18:40.720
Dann ist es ja älter als Dominik und ich.

00:18:41.960 --> 00:18:43.440
Ja, es gibt noch ein zweites.

00:18:43.440 --> 00:18:45.020
Ich habe noch einen Versuch für den Witz.

00:18:45.400 --> 00:18:47.320
Es gibt ja noch ein zweites Jubiläum.

00:18:47.320 --> 00:18:49.560
die Python Software Foundation ist 20 Jahre alt geworden.

00:18:50.660 --> 00:18:51.620
Und die

00:18:51.620 --> 00:18:53.280
ist dann ja älter als ich.

00:18:54.540 --> 00:18:55.460
Okay, verdammt.

00:18:55.880 --> 00:18:57.540
Das funktioniert nicht beliebig

00:18:57.540 --> 00:18:57.980
nach unten.

00:18:58.840 --> 00:19:01.220
Wir nehmen dir alle ab, dass du erst 19 bist, Jochen.

00:19:01.540 --> 00:19:03.520
Die ganzen Geschichten, wo du

00:19:03.520 --> 00:19:05.700
über Computerspiele aus den 90ern erzählst,

00:19:05.760 --> 00:19:07.200
das ist alles nur, was du gehört hast,

00:19:07.360 --> 00:19:08.040
was du gelesen hast.

00:19:08.640 --> 00:19:09.080
Genau.

00:19:10.280 --> 00:19:11.460
Das ist eine Tarnung.

00:19:12.260 --> 00:19:14.000
Ja, wenn man letzten Montag in einem Schaltjahr geboren

00:19:14.000 --> 00:19:15.980
worden wäre, dann hätte man tatsächlich das Problem gehabt,

00:19:15.980 --> 00:19:45.960
und Jochen unterhalten sich über die Programmiersprache Python

00:19:45.980 --> 00:19:47.820
Du hattest mir, Johannes, glaub ich mal

00:19:47.820 --> 00:19:49.560
so einen Link geschickt auf so einen Benchmark

00:19:49.560 --> 00:19:51.080
Ja, oh

00:19:51.080 --> 00:19:54.240
Da arbeiten wir jetzt auch schon eine Weile

00:19:54.240 --> 00:19:54.760
dran, Jochen

00:19:54.760 --> 00:19:57.960
Ja, und genau, da ging

00:19:57.960 --> 00:19:59.680
auch über Hacker-News und dann

00:19:59.680 --> 00:20:01.900
war es irgendwie, war da auch bei Python-Bytes drin

00:20:01.900 --> 00:20:03.940
und so und da ging es darum

00:20:03.940 --> 00:20:05.480
da hatte ja jemand irgendwie, weiß nicht genau

00:20:05.480 --> 00:20:07.680
was da, also da ging es halt um

00:20:07.680 --> 00:20:09.620
Jemand hat irgendwas gebenchmarked

00:20:09.620 --> 00:20:11.960
Und das Einzige, was ich dazu im Grunde

00:20:11.960 --> 00:20:13.860
nur anmerken wollte, also

00:20:13.860 --> 00:20:15.800
also

00:20:15.800 --> 00:20:19.100
mit so einem Körnchen Salz

00:20:19.100 --> 00:20:20.960
sollte man da vielleicht

00:20:20.960 --> 00:20:23.000
mit dazu tun.

00:20:23.960 --> 00:20:27.480
Also du sagst, man müsste das mal selber machen.

00:20:27.620 --> 00:20:29.960
Das ist das, was ich da raushöre.

00:20:30.040 --> 00:20:30.240
Genau.

00:20:30.860 --> 00:20:33.280
Ich könnte das bestimmt fortsetzen.

00:20:33.620 --> 00:20:34.680
Lügen, dreiste Lügen.

00:20:36.980 --> 00:20:37.560
Haben kurz...

00:20:37.560 --> 00:20:37.960
Nee, halt, warte.

00:20:40.400 --> 00:20:40.880
Benchmark.

00:20:40.920 --> 00:20:42.880
Aber ich glaube, das ist mal

00:20:42.880 --> 00:20:44.720
eine eigene Episode, oder?

00:20:44.720 --> 00:20:46.680
wenn wir mal über diesen Benchmark sprechen, den wir

00:20:46.680 --> 00:20:48.500
jetzt schon seit drei Monaten in der Mache haben.

00:20:48.920 --> 00:20:49.440
Achso, ja.

00:20:49.860 --> 00:20:52.600
Wir wollen beweisen, dass Python

00:20:52.600 --> 00:20:54.960
die schnellste Sprache ist unter der Sonne.

00:20:55.000 --> 00:20:55.980
Nee, aber vielleicht schnell genug.

00:20:56.080 --> 00:20:58.720
Wir wollen beweisen, wie man damit schnell

00:20:58.720 --> 00:20:59.200
sein kann.

00:21:01.080 --> 00:21:02.580
Oh, das ist ein Thema

00:21:02.580 --> 00:21:04.680
für eine eigene, ich glaube, da brauchen wir wirklich

00:21:04.680 --> 00:21:06.540
Dann machen wir eine eigene Geschichte zu.

00:21:07.080 --> 00:21:08.720
Okay, ich wollte nur sagen, also wenn man

00:21:08.720 --> 00:21:10.440
jetzt diesen Artikel sich anguckt, vielleicht nochmal

00:21:10.440 --> 00:21:12.740
also wenn man es wirklich wissen will,

00:21:12.740 --> 00:21:13.420
muss man es selber messen.

00:21:13.420 --> 00:21:15.180
und ja, also

00:21:15.180 --> 00:21:16.940
es ist nicht so ganz einfach, also zum Beispiel

00:21:16.940 --> 00:21:19.500
eben bei dem Artikel, dass ich es dann so angucke,

00:21:19.920 --> 00:21:20.720
wie wenn da so

00:21:20.720 --> 00:21:22.920
HTTP-Doodles oder

00:21:22.920 --> 00:21:25.380
bei Scenic ist das dann installiert und im anderen

00:21:25.380 --> 00:21:27.220
nicht und HTTP-Parsing kann ja dann

00:21:27.220 --> 00:21:28.820
das Nadelöhrer, also ich will gar nicht

00:21:28.820 --> 00:21:30.740
anfangen davon, stimmt,

00:21:31.260 --> 00:21:33.020
da machen wir mal irgendwann, wenn wir Ergebnisse haben,

00:21:33.640 --> 00:21:34.980
aber ja,

00:21:35.540 --> 00:21:36.660
Benchmark ist alles nicht so einfach.

00:21:37.140 --> 00:21:38.980
Man kann nur so viel verraten, wir haben extra

00:21:38.980 --> 00:21:41.380
VMs bei einem Hoster gekauft,

00:21:41.380 --> 00:21:43.540
um genügend Bandbreite und alles zu haben

00:21:43.540 --> 00:21:45.100
und wir haben sie bisher nicht gebraucht.

00:21:47.900 --> 00:21:48.300
Ja.

00:21:52.520 --> 00:21:52.920
Gut.

00:21:53.400 --> 00:21:53.800
Ja, gut.

00:21:54.600 --> 00:21:58.620
Jetzt dachte ich, Entschuldigung, jetzt müsst ihr mir das erzählen.

00:21:58.700 --> 00:22:00.140
Jetzt bin ich sonst die ganze Zeit neugierig.

00:22:02.200 --> 00:22:04.180
Jochen hat einfach schon sehr viele Dinge ausprobiert

00:22:04.180 --> 00:22:05.480
und wir haben es bisher nicht geschafft,

00:22:06.440 --> 00:22:08.000
so viel Bandbreite zu verbrauchen,

00:22:08.000 --> 00:22:09.180
dass wir mehr Bandbreite,

00:22:09.180 --> 00:22:10.380
also dass wir

00:22:10.380 --> 00:22:13.040
ein Netzwerk sinnvoll

00:22:13.040 --> 00:22:14.040
benutzen hätten können.

00:22:14.080 --> 00:22:16.620
Also das war das mit dem Gigabit, was du nicht kriegst

00:22:16.620 --> 00:22:18.620
ausgelastet.

00:22:18.920 --> 00:22:21.180
Was war die erste Teil, Jochen, die du hattest?

00:22:21.260 --> 00:22:22.860
Was war dein erstes Ergebnis? Wie viele

00:22:22.860 --> 00:22:23.940
Kilobit hast du?

00:22:24.560 --> 00:22:27.460
Schon ein paar Megabyte pro Sekunde,

00:22:27.620 --> 00:22:29.200
aber halt noch...

00:22:29.200 --> 00:22:30.180
Weit entfernt.

00:22:30.400 --> 00:22:32.120
Ja, ist noch nicht da, wo es hin muss.

00:22:32.720 --> 00:22:34.820
Ja, also es geht darum, dass halt die Konkurrenz von

00:22:34.820 --> 00:22:37.600
Python-Web-Applikationen

00:22:37.600 --> 00:22:38.220
oder was ging's?

00:22:38.480 --> 00:22:40.680
Nee, also das Ziel da war es eigentlich rauszukriegen,

00:22:40.780 --> 00:22:42.720
braucht man sowas wie ein Nginx eigentlich noch davor

00:22:42.720 --> 00:22:44.140
oder kann man das nicht einfach alles jetzt wo,

00:22:44.360 --> 00:22:46.440
in der schönen neuen Async-Welt, so alle gut,

00:22:46.520 --> 00:22:48.520
ich meine, das ist halt irgendwie so eine Tradition

00:22:48.520 --> 00:22:50.520
geworden, dass man da halt irgendwie fürs File-Serving

00:22:50.520 --> 00:22:52.160
irgendwie ein Nginx davor hat oder das halt

00:22:52.160 --> 00:22:52.880
über einen CDN macht.

00:22:54.220 --> 00:22:56.460
Ja, oder das halt irgendwie von Amazon machen lässt

00:22:56.460 --> 00:22:58.460
oder so, das ist halt irgendwie so, das macht man halt so.

00:22:59.180 --> 00:23:00.460
Die Frage ist, gibt's dafür eigentlich

00:23:00.460 --> 00:23:02.540
jetzt noch so einen Grund, weil tatsächlich

00:23:02.540 --> 00:23:04.320
kann man ja mit Async und der ganzen Wintergut

00:23:04.320 --> 00:23:05.740
und den ganzen schönen Dingen, die es jetzt alles gibt,

00:23:05.740 --> 00:23:07.620
Also man könnte das ja eigentlich auch selber machen

00:23:07.620 --> 00:23:08.980
Die Frage ist halt nur, ist das schnell genug?

00:23:09.100 --> 00:23:11.220
Also wenn ich jetzt 100 Gigabit saturieren möchte

00:23:11.220 --> 00:23:13.060
Hm, okay, dann

00:23:13.060 --> 00:23:15.480
nehme ich vielleicht doch was anderes

00:23:15.480 --> 00:23:17.240
Aber wenn

00:23:17.240 --> 00:23:18.740
ich jetzt sowieso relativ

00:23:18.740 --> 00:23:21.380
wenn ich jetzt sagen wir mal nur so ein Gigabit habe oder so an einem Server

00:23:21.380 --> 00:23:23.280
Dann kann es ja sein, dass es

00:23:23.280 --> 00:23:24.900
völlig egal ist, ob ich NGTX nehme oder

00:23:24.900 --> 00:23:27.260
irgendwie Python, weil es ist schnell genug

00:23:27.260 --> 00:23:29.420
Und Gigabit ist ja heutzutage eigentlich gar nicht mehr so wahnsinnig

00:23:29.420 --> 00:23:30.780
viel, vielleicht reicht es ja

00:23:30.780 --> 00:23:33.260
Und das hört ihr weiter in unserer Webseite

00:23:33.260 --> 00:23:35.320
Genau, dann haben wir das ein bisschen

00:23:35.320 --> 00:23:37.320
ange teasert, aber genau. In der Benchmark-Episode.

00:23:37.560 --> 00:23:37.620
Ja.

00:23:39.680 --> 00:23:40.980
Genau. Wir wollten nämlich noch eine

00:23:40.980 --> 00:23:43.180
Datentypen-Folge machen, die haben wir auch noch aufgeschoben.

00:23:43.320 --> 00:23:44.320
Nur für alle, die sich dann überräumen.

00:23:45.700 --> 00:23:46.060
Ja.

00:23:46.740 --> 00:23:47.240
Ja, okay.

00:23:48.880 --> 00:23:50.700
Ja, ist eine spannende Sache.

00:23:51.000 --> 00:23:51.860
Da gibt es viele schöne Dinge.

00:23:52.620 --> 00:23:54.640
Ich habe noch was zum Thema Web-Server.

00:23:55.120 --> 00:23:57.080
Habe ich kürzlich gefunden. Fly.io.

00:23:58.440 --> 00:23:59.300
Habe es noch nicht selber

00:23:59.300 --> 00:24:01.180
ausprobiert, aber das scheint so ein bisschen

00:24:01.180 --> 00:24:03.480
wie das developerfreundliche

00:24:03.480 --> 00:24:05.460
Heroku zu sein.

00:24:06.720 --> 00:24:08.460
Mit einfachem

00:24:08.460 --> 00:24:09.220
Deployment überall.

00:24:11.640 --> 00:24:12.600
Wo man

00:24:12.600 --> 00:24:14.040
quasi einfach Docker-Container hinschickt

00:24:14.040 --> 00:24:16.480
und die lassen wieder laufen, wo man sie haben möchte.

00:24:16.820 --> 00:24:18.400
Das sah sehr gut aus auf den

00:24:18.400 --> 00:24:20.240
ersten Blick und der hat auch sehr viele

00:24:20.240 --> 00:24:22.420
schöne technische Artikel geschrieben.

00:24:22.800 --> 00:24:24.320
Also es hat mir gut gefallen.

00:24:24.420 --> 00:24:26.560
Ich habe noch keine Gelegenheit gehabt, das auszuprobieren,

00:24:26.640 --> 00:24:28.160
aber ich habe mir vorgenommen,

00:24:28.160 --> 00:24:28.940
das auszuprobieren.

00:24:29.960 --> 00:24:32.300
Sehr cool, weil da gab es mich, das habe ich heute irgendwann gehört,

00:24:32.420 --> 00:24:32.720
glaube ich,

00:24:32.720 --> 00:24:37.160
auch eine neue Episode vom Django Chat Podcast,

00:24:37.840 --> 00:24:39.640
wo Peter Baumgartner

00:24:39.640 --> 00:24:41.060
von Lincoln Group,

00:24:41.220 --> 00:24:43.700
der auch dieses High-Performance-Django-Buch,

00:24:44.180 --> 00:24:45.440
der hat das, glaube ich, geschrieben

00:24:45.440 --> 00:24:47.800
und der hat auch so ein Ding

00:24:47.800 --> 00:24:48.940
gebaut. Ich meine, Heroku

00:24:48.940 --> 00:24:51.660
ist ja auch immer so die Empfehlung für, wenn man sich keine Gedanken

00:24:51.660 --> 00:24:53.580
machen möchte, aber Heroku

00:24:53.580 --> 00:24:54.620
ist halt auch... Und viel Geld hat.

00:24:54.820 --> 00:24:57.620
Und viel Geld hat, ist halt recht teuer und es ist halt auch

00:24:57.620 --> 00:24:59.180
so, dass deren...

00:24:59.180 --> 00:25:01.620
Es ist doch eher so Ruby und Rails-Ding und deren

00:25:01.620 --> 00:25:07.440
Django Support erfährt jetzt nicht immer unbedingt die Liebe, die man jetzt sich erhoffen würde, vielleicht von so einem Hoster.

00:25:08.420 --> 00:25:10.780
Um es mal so vorsichtig zu formulieren.

00:25:11.280 --> 00:25:17.720
Und der hat halt jetzt auch sowas gebaut, nämlich das nennt sich Uppack.io und ist halt auch im Grunde sowas wie Heroku.

00:25:17.860 --> 00:25:23.460
Also sozusagen, du kannst deinen Kram auf AWS hosten, nur halt mehr so auf Django optimiert und so.

00:25:24.040 --> 00:25:26.480
Aber cool, ja, ist schön zu sehen, dass es da mehr Optionen gibt.

00:25:26.480 --> 00:25:29.060
Spannend, dass es so viele Firmen

00:25:29.060 --> 00:25:30.820
im indischen Ozean gibt, das ist schon

00:25:30.820 --> 00:25:31.720
sehr cool

00:25:31.720 --> 00:25:35.560
IO ist für den indischen Ozean

00:25:35.560 --> 00:25:35.900
Achso

00:25:35.900 --> 00:25:42.860
Ja, der indische Ozean hat mal

00:25:42.860 --> 00:25:44.740
ausnahmsweise mal was richtig gemacht

00:25:44.740 --> 00:25:46.080
mit der Wahl des Problems

00:25:46.080 --> 00:25:48.060
Ja, Glück gehabt

00:25:48.060 --> 00:25:48.860
Glück gehabt

00:25:48.860 --> 00:25:49.100
Ja

00:25:49.100 --> 00:25:54.280
Pack IO sagst du, Jochen

00:25:54.280 --> 00:25:56.040
du tust uns den Linker sicherlich

00:25:56.040 --> 00:25:58.100
Genau, Uppack mit 3P.

00:25:58.960 --> 00:26:00.540
Das ist ein bisschen schlecht vielleicht, ich weiß nicht genau.

00:26:01.660 --> 00:26:03.720
Naja, aber genau, ich tue den Link in die Shownotes,

00:26:03.940 --> 00:26:04.680
dann kann man sich das angucken.

00:26:06.220 --> 00:26:06.400
Ja.

00:26:07.040 --> 00:26:08.460
Jetzt haben wir nur noch Reste übrig, oder?

00:26:08.800 --> 00:26:09.900
Ja, jetzt haben wir nur noch Reste übrig.

00:26:10.000 --> 00:26:10.700
Es ist nur noch der Rest.

00:26:11.200 --> 00:26:12.300
Dann müssen wir jetzt über die Reste reden.

00:26:12.300 --> 00:26:12.560
Ja.

00:26:14.000 --> 00:26:16.580
Also, wo waren wir eben stehen geblieben, Johannes?

00:26:17.260 --> 00:26:17.740
Representationist?

00:26:17.820 --> 00:26:21.940
Ja, im Vergleich zu Remote Procedure Call.

00:26:22.580 --> 00:26:24.560
Also ich meine, Remote Procedure Call,

00:26:24.560 --> 00:26:26.340
das ist so die Technologie, die man kennt

00:26:26.340 --> 00:26:27.440
und das ist so ein bisschen so die

00:26:27.440 --> 00:26:30.500
Sache, die man halt machen möchte, wenn man

00:26:30.500 --> 00:26:32.360
sagt, okay, ich habe jetzt hier ein Programm geschrieben und das ist

00:26:32.360 --> 00:26:34.400
lokal, aber es wäre doch viel cooler,

00:26:34.520 --> 00:26:35.940
wenn das irgendwo anders laufen würde.

00:26:37.220 --> 00:26:38.540
Und dann macht man sich

00:26:38.540 --> 00:26:40.240
halt irgendwie so ein Endpoint, wie auch immer,

00:26:40.360 --> 00:26:41.200
der geartet ist, ja.

00:26:43.340 --> 00:26:44.540
Java, XML,

00:26:44.740 --> 00:26:45.120
LPC.

00:26:46.400 --> 00:26:48.380
Klar, das ist das Erste, was mir jetzt in den Gedanken kommt.

00:26:48.780 --> 00:26:50.020
Ja, das hatten wir auch.

00:26:50.440 --> 00:26:51.940
Sprich es ruhig aus, so wie es früher war,

00:26:51.940 --> 00:26:53.960
das SOAP zum Beispiel.

00:26:53.960 --> 00:26:56.720
Ja, das hat man früher einfach so gemacht.

00:26:57.340 --> 00:27:02.740
Und das ist dann im Wesentlichen halt eine Java-Bibliothek, die man sich einbindet,

00:27:03.560 --> 00:27:07.780
die Funktionen anbietet, die aber nicht lokal ausgeführt werden, sondern remote.

00:27:08.560 --> 00:27:10.640
Und das können alle möglichen Funktionen sein.

00:27:10.720 --> 00:27:13.000
Die können was berechnen oder die können eine Datenbank abrufen

00:27:13.000 --> 00:27:18.040
oder die können einen Roboter starten oder die können die Kamera oder keine Ahnung,

00:27:18.140 --> 00:27:18.900
irgendwas können die machen.

00:27:20.100 --> 00:27:23.360
Und das siehst du denen aber erstmal nicht an, weil die eben so gepackt sind,

00:27:23.360 --> 00:27:25.500
eben gerade diese Java XML LPC

00:27:25.500 --> 00:27:26.780
die macht dann eine Java-Klasse

00:27:26.780 --> 00:27:29.540
und wenn ich da alle Verbindungsdaten reingegeben

00:27:29.540 --> 00:27:31.520
habe richtig und mich korrekt verbunden

00:27:31.520 --> 00:27:33.480
habe, dann funktioniert die wie eine lokale Funktion.

00:27:34.320 --> 00:27:35.460
Und das ist ja auch so ein bisschen das,

00:27:35.560 --> 00:27:37.320
was im Namen steckt. Remote Procedure Call

00:27:37.320 --> 00:27:39.540
heißt einfach, es gibt

00:27:39.540 --> 00:27:41.520
normale Funktionen, also normale

00:27:41.520 --> 00:27:43.500
Prozeduren und es gibt Prozeduren, die sind auf einem anderen

00:27:43.500 --> 00:27:45.080
Rechner. Und

00:27:45.080 --> 00:28:03.243
das ist das was man fr gemacht hatte und das war ganz ganz schlimm Das war ganz ganz schrecklich 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 gar nichts und diese Interfaces bauen war auch ganz schrecklich

00:28:03.243 --> 00:28:33.222
und Jochen unterhalten sich über die Programmiersprache Python

00:28:33.243 --> 00:28:53.822
Also ich weiß es natürlich nicht, ich war nicht dabei, aber ich denke, dass das eben der Grund war, warum man zu REST APIs oder einer der Gründe, warum man zu REST APIs gegangen ist, wo es eben nicht darum geht, Prozeduren aufzurufen, also wo man nicht sagt, mach irgendwas, sondern wo man im Endeffekt nur sagt, entweder gib mir ein Objekt oder nimm dieses Objekt.

00:28:53.822 --> 00:29:03.163
Könnte man ja vielleicht auch so formulieren, dass man sagt, man versucht einfach die Dinge, die im HTTP-Protokoll eingebaut sind, auch tatsächlich zu benutzen, so wie sie halt

00:29:03.163 --> 00:29:05.462
schon da sind und nicht

00:29:05.462 --> 00:29:07.802
weil das ist halt eigentlich glaube ich auch der Vorwurf

00:29:07.802 --> 00:29:09.383
sozusagen von Restseite, die man

00:29:09.383 --> 00:29:11.982
an so Sachen wie Soap oder auch

00:29:11.982 --> 00:29:14.042
Sachen, wo dann andere Leute versucht haben, Korba

00:29:14.042 --> 00:29:15.643
irgendwie zu retten

00:29:15.643 --> 00:29:17.862
in der Webwelt, macht, dass man sagt, ja

00:29:17.862 --> 00:29:19.602
ihr habt hier so ein altes, überholtes

00:29:19.602 --> 00:29:21.503
Architekturmodell, von dem wie

00:29:21.503 --> 00:29:23.222
eure verteilte Anwendung funktionieren soll

00:29:23.222 --> 00:29:25.003
und jetzt versucht er jetzt,

00:29:25.062 --> 00:29:27.362
das Web zu degradieren, dass das nur

00:29:27.362 --> 00:29:29.503
ein Transport-Layer ist für eure Idee,

00:29:29.743 --> 00:29:31.442
die auch schon vorher eigentlich

00:29:31.442 --> 00:29:32.562
nicht funktioniert hat.

00:29:32.602 --> 00:29:33.783
Was war in Form war?

00:29:34.102 --> 00:29:37.403
Da gibt es eine

00:29:37.403 --> 00:29:39.202
schöne Organisation mit dem Kürzel

00:29:39.202 --> 00:29:39.903
OMG.

00:29:41.283 --> 00:29:41.942
Oh mein Gott.

00:29:43.102 --> 00:29:45.383
Common Object Request Broker Architecture.

00:29:45.783 --> 00:29:47.383
Genau, und die hat das

00:29:47.383 --> 00:29:49.342
standardisiert. Das ist die Object Management

00:29:49.342 --> 00:29:49.783
Group.

00:29:52.102 --> 00:29:52.982
Ich hatte auch

00:29:52.982 --> 00:29:54.263
Ich hatte viel Spaß mit Cobra

00:29:54.263 --> 00:29:57.082
schon

00:29:57.082 --> 00:29:59.062
und ja, das war

00:29:59.062 --> 00:29:59.763
das war

00:29:59.763 --> 00:30:01.903
auch alles nicht schön.

00:30:02.202 --> 00:30:05.263
Das klang alles nach einer guten Idee

00:30:05.263 --> 00:30:06.802
und dann hat man es versucht

00:30:06.802 --> 00:30:08.602
zu verwenden

00:30:08.602 --> 00:30:10.942
und dann sind schreckliche Dinge passiert.

00:30:11.582 --> 00:30:13.082
Ich meine, vielleicht haben Leute das auch verwendet

00:30:13.082 --> 00:30:14.243
und es war voll cool, aber

00:30:14.243 --> 00:30:16.442
ich erinnere mich an große Schmerzen.

00:30:17.903 --> 00:30:18.923
Okay, und in

00:30:18.923 --> 00:30:21.123
HTTP selbst ist dann sowas eingebaut

00:30:21.123 --> 00:30:22.883
wie, gib mir ein,

00:30:22.883 --> 00:30:52.862
oder bekommen ein Objekt.

00:30:52.883 --> 00:30:54.643
ein, zwei andere, die da wichtig sind. Es gibt noch

00:30:54.643 --> 00:30:56.743
Put und Delete, die immer wieder

00:30:56.743 --> 00:30:58.862
notwendig sind.

00:31:00.003 --> 00:31:00.462
Ja, aber

00:31:00.462 --> 00:31:02.763
gerade da fängt es dann schon so an. Was ist eigentlich der Unterschied

00:31:02.763 --> 00:31:04.102
zwischen Put, Post und Patch?

00:31:04.643 --> 00:31:06.783
Ich weiß es nicht. Ich würde sagen, spontan

00:31:06.783 --> 00:31:07.923
wäre es so, Put, da

00:31:07.923 --> 00:31:09.903
updatest du ein komplettes Objekt

00:31:09.903 --> 00:31:12.743
und Patch nur ein Teil davon. Also wenn du

00:31:12.743 --> 00:31:14.643
sozusagen nur ein Attribut an einem Objekt änderst,

00:31:14.722 --> 00:31:16.903
dann machst du das per Patch. Wenn du das Objekt

00:31:16.903 --> 00:31:19.023
in einer Version

00:31:19.023 --> 00:31:20.562
änderst, dann puttest du das komplett.

00:31:20.562 --> 00:31:21.222
Und Post?

00:31:21.222 --> 00:31:23.082
Post es hinzufügen.

00:31:24.842 --> 00:31:25.822
Ja, aber das ist ja auch nicht so.

00:31:25.923 --> 00:31:27.702
Das ist ja bei REST auch nochmal anders geregelt.

00:31:27.783 --> 00:31:29.423
Das ist ja, wenn du auf eine ID postest,

00:31:29.862 --> 00:31:31.582
puttest, dann ist es ein

00:31:31.582 --> 00:31:33.763
neues Objekt mit dieser, wenn es die

00:31:33.763 --> 00:31:35.962
noch nicht gibt, dann ist es neues und wenn du auf eine

00:31:35.962 --> 00:31:37.462
Ja, so ganz klar.

00:31:38.263 --> 00:31:40.302
Ja, ehrlich gesagt

00:31:40.302 --> 00:31:41.883
weiß ich auch nicht. Also braucht man nur noch zwei.

00:31:42.802 --> 00:31:43.383
Get und Post.

00:31:43.602 --> 00:31:45.962
Ja, das ist halt das, was viele Leute machen. Mit denen kommt man zurecht.

00:31:46.082 --> 00:31:47.842
Mit denen kommt man schon zurecht, aber das ist

00:31:47.842 --> 00:31:49.903
natürlich. Delete brauchst du noch, Dominik.

00:31:49.982 --> 00:31:51.062
Delete brauchst du für den Körner. Na gut.

00:31:51.222 --> 00:31:53.923
Man kann nicht posten und sagen, das Objekt bitte entfernen.

00:31:55.082 --> 00:32:01.042
Du kannst, nee, weil du kannst auch, du kannst posten, das kommt jetzt drauf an.

00:32:01.542 --> 00:32:04.383
Und da fangen schon so ein bisschen die Probleme bei REST an.

00:32:04.482 --> 00:32:10.082
REST besteht ja aus mehreren Teilen und ein Teil ist eben, benutze nur diese HTTP-Werben.

00:32:10.883 --> 00:32:15.243
Und da fängt eben das, eins der Probleme schon an.

00:32:15.243 --> 00:32:18.062
eine der Konventionen ist, wenn du

00:32:18.062 --> 00:32:20.282
auf den Pfad

00:32:20.282 --> 00:32:21.683
eines Objektes postest

00:32:21.683 --> 00:32:24.143
und nur eine gewisse Menge

00:32:24.143 --> 00:32:26.322
von Attributen mitgibst, dann heißt es

00:32:26.322 --> 00:32:27.962
ändere bitte diese Attribute

00:32:27.962 --> 00:32:32.003
wenn du jetzt sagen würdest, wenn ich

00:32:32.003 --> 00:32:33.923
darauf poste, ohne ein Attribut zu geben

00:32:33.923 --> 00:32:35.802
dann hat es schon zwei Bedeutungen

00:32:35.802 --> 00:32:37.903
hat es entweder die Bedeutung, die du jetzt sagst, nämlich

00:32:37.903 --> 00:32:40.183
lösche dieses Objekt, also entferne

00:32:40.183 --> 00:32:42.143
alle Attribute, oder es hat die

00:32:42.143 --> 00:32:42.643
Bedeutung

00:32:42.643 --> 00:32:45.322
ändere kein Attribut.

00:32:47.602 --> 00:32:52.042
Und weil das nicht offensichtlich ist, ist es einfacher Delete zu nehmen.

00:32:52.442 --> 00:32:53.582
Delete ist eindeutig.

00:32:53.802 --> 00:32:57.143
Und Delete ist eine von den Sachen bei REST, die völlig unstrittig sind.

00:32:57.462 --> 00:33:00.582
Wenn ich eine URL habe, wenn ich einen Pfad habe, der zu einem Objekt gehört

00:33:00.582 --> 00:33:04.643
und ich mache da Delete drauf und ich darf das und da kommt der richtige Status zurück,

00:33:05.023 --> 00:33:05.663
dann ist es gelöscht.

00:33:06.403 --> 00:33:08.822
Das ist völlig unstrittig und das ist auch eine super Sache,

00:33:08.822 --> 00:33:10.782
weil ab jetzt brauchen wir ums Löschen

00:33:12.782 --> 00:33:12.782


00:33:15.123 --> 00:33:16.243
Das geht immer.

00:33:19.102 --> 00:33:21.222
Was dafür sprechen würde, dass man Post nicht löscht?

00:33:21.903 --> 00:33:22.102
Nein.

00:33:23.003 --> 00:33:24.163
Genau, mit Post löscht du nie.

00:33:24.263 --> 00:33:27.123
Post und Put und Patch sind immer nur

00:33:27.123 --> 00:33:27.702
Additiv.

00:33:30.442 --> 00:33:33.102
Okay, aber den Unterschied da genau zu verwenden

00:33:33.102 --> 00:33:35.282
ist wahrscheinlich, wie man gerade schon rausgehört hat,

00:33:35.883 --> 00:33:37.383
eher vielleicht gar nicht so.

00:33:37.683 --> 00:33:39.462
Ja, man findet auch ganz viel

00:33:39.462 --> 00:33:46.442
tatsächlich in freier Wildbahn und halt Leute, die irgendwie das halt anders machen, als man das vielleicht tun sollte.

00:33:47.243 --> 00:33:53.362
Ja, und wir werden sicherlich auch hier ganz viele Kommentare kriegen, dass wir alle Idioten sind und dass es nur eine wahre Lösung gibt.

00:33:55.683 --> 00:33:57.643
Ja, da kommt dann die Response zurück, 402.

00:34:00.222 --> 00:34:05.163
Nee, 201 kommt dann zurück. 201 heißt Objekt erzeugt.

00:34:05.163 --> 00:34:15.243
Ja, und ich meine, ich sehe immer, wenn ich irgendwie, also es gibt, wenn ich mit anderen APIs rede, ist es ganz oft, dass ich irgendwie was erzeuge und dann kommt halt 200 zurück zum Beispiel, was halt falsch ist oder

00:34:15.243 --> 00:34:18.683
Ja, aber kann auch sein, kann auch sein

00:34:18.683 --> 00:34:26.062
Ja, kann auch sein, weil 200 bedeutet ja nur okay, 200 bedeutet ja nur in Ordnung

00:34:56.062 --> 00:35:26.042
und Jochen unterhalten sich über die Programmiersprache Python

00:35:26.062 --> 00:35:30.082
Ja, das ist so ein Problem.

00:35:30.403 --> 00:35:32.163
Auch das ist so ein Problem, wenn man auf 201

00:35:32.163 --> 00:35:34.102
wartet und erwartet, dass das Subjekt

00:35:34.102 --> 00:35:34.743
zurückgegeben wird,

00:35:36.183 --> 00:35:38.002
dann kommt ganz oft

00:35:38.002 --> 00:35:39.482
gar nichts zurück und dann schlägt

00:35:39.482 --> 00:35:41.463
quasi diese Abfrage fehl, weil

00:35:41.463 --> 00:35:43.143
kein Content kommt.

00:35:46.022 --> 00:35:48.062
Auch damit habe ich

00:35:48.062 --> 00:35:49.383
mich schon abgeplagt.

00:35:49.383 --> 00:35:49.943
Ja, ja.

00:35:51.443 --> 00:35:53.282
Na gut. Ich verpake mich immer

00:35:53.282 --> 00:35:54.243
mit dem 402 ab.

00:35:56.062 --> 00:35:56.743
und was war das nochmal?

00:35:58.743 --> 00:35:59.502
Payment required.

00:35:59.643 --> 00:36:00.403
Payment required, ja.

00:36:01.623 --> 00:36:02.342
Reserved for future.

00:36:02.502 --> 00:36:04.243
Nee, der wichtigste ist doch 418.

00:36:04.703 --> 00:36:06.082
Ja, T-Pod war das, oder?

00:36:06.423 --> 00:36:07.243
Armer T-Pod, ja.

00:36:10.302 --> 00:36:10.862
Ja, genau.

00:36:11.062 --> 00:36:12.342
Also ich meine, tatsächlich in der Praxis

00:36:12.342 --> 00:36:14.502
funktioniert es meistens ja eigentlich ganz gut.

00:36:14.903 --> 00:36:16.542
Man kann sich da irgendwie durchwurschteln

00:36:16.542 --> 00:36:17.522
und dann geht es schon.

00:36:20.062 --> 00:36:21.423
Und genau.

00:36:22.703 --> 00:36:23.562
Tatsächlich ist aber auch,

00:36:23.562 --> 00:36:24.263
dann gibt es ja so,

00:36:24.263 --> 00:36:46.263
und

00:36:46.263 --> 00:36:50.062
Doktorarbeit. Hat er seine Dissertation drüber geschrieben. Ja, genau. 2005 ist sie, glaube ich, erschienen.

00:36:51.482 --> 00:36:52.623
Und da

00:36:52.623 --> 00:36:56.082
kann man sich angucken. Gibt es online, auch als Webseite.

00:36:56.423 --> 00:36:56.743
Sehr schön.

00:36:58.982 --> 00:37:00.482
Oh, auch sehr interessant. Link, please.

00:37:00.482 --> 00:37:02.042
Ja, genau. Link kommt nicht schon.

00:37:02.203 --> 00:37:03.062
Auch sehr interessant.

00:37:04.143 --> 00:37:05.923
Die Dissertation fängt an

00:37:05.923 --> 00:37:08.663
und endet jeweils mit einem Zitat von

00:37:08.663 --> 00:37:09.862
na, wie heißt er noch?

00:37:10.443 --> 00:37:11.643
Der Architekt mit den

00:37:11.643 --> 00:37:12.982
Entwurfsmustern.

00:37:12.982 --> 00:37:16.862
mit den Entwurfsmustern

00:37:16.862 --> 00:37:18.082
mit den Patterns

00:37:18.082 --> 00:37:19.623
angefangen hat, genau

00:37:19.623 --> 00:37:22.022
Christopher Alexander glaube ich

00:37:22.022 --> 00:37:25.643
und genau

00:37:25.643 --> 00:37:27.962
naja, also es gibt da interessante Verbindungen

00:37:27.962 --> 00:37:29.163
und

00:37:29.163 --> 00:37:31.022
der

00:37:31.022 --> 00:37:33.703
also in dieser Dissertation beschreibt er halt sozusagen

00:37:33.703 --> 00:37:35.802
was so ein bisschen die Idee hinter dem Ganzen ist

00:37:35.802 --> 00:37:37.683
und dass eigentlich er sich wünscht

00:37:37.683 --> 00:37:38.443
dass halt sozusagen

00:37:38.443 --> 00:37:40.903
das hat eine etwas komische Abkürzung

00:37:40.903 --> 00:37:42.723
dass sozusagen

00:37:42.723 --> 00:37:45.163
Hypermedia as the Engine of

00:37:45.163 --> 00:37:45.602
...

00:37:45.602 --> 00:37:49.282
Genau.

00:37:51.082 --> 00:37:52.302
Moment, wie war das?

00:37:53.203 --> 00:37:53.643
HatoS.

00:37:53.883 --> 00:37:54.883
HatoS, genau.

00:37:55.522 --> 00:37:56.203
ApplicationState, genau.

00:37:57.342 --> 00:37:59.522
Hypermedia as the Engine of ApplicationState, genau.

00:37:59.623 --> 00:38:01.643
Richtig. Das ist lang und kompliziert

00:38:01.643 --> 00:38:03.623
und komisch. Und was heißt das? Was ist das? Was macht das?

00:38:04.482 --> 00:38:04.723
Naja.

00:38:05.062 --> 00:38:06.322
Das würde ich jetzt auch gerne mal sich nachholen.

00:38:08.223 --> 00:38:09.403
Weil das hätte ich genau wissen müssen.

00:38:09.482 --> 00:38:10.602
Sollte man sich nochmal diese...

00:38:10.602 --> 00:38:14.943
Also tatsächlich finde ich das beste Beispiel dafür, wie das funktionieren kann, ist halt das Web.

00:38:15.562 --> 00:38:37.223
Dass man sagt, also da ist das Hypermedia, was man halt sieht, ist das HTML und du kannst da halt dann Links folgen und siehst dann halt neue Sachen, neue Webseiten und so und kannst dann Dinge machen und sozusagen wie deine Applikation, also deine Webseite aussieht, bestimmt das Hypermedia da drin.

00:38:37.223 --> 00:38:40.123
Das ist jetzt aber nicht so, wie die meisten Leute

00:38:40.123 --> 00:38:41.883
REST-Schnittstellen verwenden, sondern die meisten

00:38:41.883 --> 00:38:43.822
verwenden das halt zum Beispiel, jetzt weiß ich nicht,

00:38:43.943 --> 00:38:45.842
was halt viele machen, als

00:38:45.842 --> 00:38:47.883
Datenlieferant für ihre Single-Page-App

00:38:47.883 --> 00:38:50.903
Aber die Single-Page-Apps,

00:38:50.923 --> 00:38:52.243
die es so gibt, die sind eigentlich so gar nicht

00:38:52.243 --> 00:38:52.522
REST

00:38:52.522 --> 00:38:55.943
Und die sind auch, was das Hypermedia-Ding angeht,

00:38:56.022 --> 00:38:56.462
eigentlich

00:38:56.462 --> 00:38:59.802
ist das auch wieder so ein Ding,

00:38:59.862 --> 00:39:01.663
was sich aus einer alten Welt rübergerettet hat

00:39:01.663 --> 00:39:04.123
Insofern, ich bin mal gespannt, wie es ausgeht

00:39:04.123 --> 00:39:06.062
Es kann ja auch sein, dass sich das dann durchsetzt

00:39:06.062 --> 00:39:07.723
aber tatsächlich

00:39:07.723 --> 00:39:09.943
also ich finde ein wichtiger Punkt

00:39:09.943 --> 00:39:12.002
so bei dem, diese Single-Page-App ist eigentlich

00:39:12.002 --> 00:39:13.782
voll cool und so, man kann damit tatsächlich ja

00:39:13.782 --> 00:39:15.903
Applikationen bauen, die so ein bisschen wirken, als

00:39:15.903 --> 00:39:18.042
wären sie Desktop-Applikationen so wie früher

00:39:18.042 --> 00:39:20.263
aber

00:39:20.263 --> 00:39:21.943
wenn man sich jetzt vorstellt, man will ein Web

00:39:21.943 --> 00:39:23.962
draus bauen und jetzt hinter jedem Link liegt

00:39:23.962 --> 00:39:25.643
so eine Single-Page-App, wo erstmal ein paar MB

00:39:25.643 --> 00:39:26.482
Zeug kommen

00:39:26.482 --> 00:39:29.383
dann ist das ja eigentlich

00:39:29.383 --> 00:39:30.582
gar nicht so gut

00:39:30.582 --> 00:39:32.143
also

00:39:32.143 --> 00:39:34.923
Stau auf der Datenautobahn

00:39:34.923 --> 00:39:36.923
Das macht das Web halt irgendwie kaputt

00:39:36.923 --> 00:39:38.862
Das macht es halt, es ist halt nicht so

00:39:38.862 --> 00:39:40.443
also so eine Single-Page

00:39:40.443 --> 00:39:42.782
Single-Page ist eigentlich auch ein falter Name, aber

00:39:42.782 --> 00:39:44.982
diese JavaScript-Applikationen

00:39:44.982 --> 00:39:46.683
die halt nur RPC quasi

00:39:46.683 --> 00:39:47.582
zu einem Server machen

00:39:47.582 --> 00:39:51.022
die sind halt eine in sich abgeschlossene Applikation

00:39:51.022 --> 00:39:52.883
und wenn man da, wenn alle Webseiten

00:39:52.883 --> 00:39:54.703
nur noch so etwas wäre, dann würden Links

00:39:54.703 --> 00:39:56.883
Also wenn man nicht sehr viel Arbeit macht, meinst du

00:39:56.883 --> 00:39:58.623
Weil gute

00:39:58.623 --> 00:40:00.462
SPAs haben natürlich

00:40:00.462 --> 00:40:01.962
Ja klar, Server-Side-Rendering

00:40:01.962 --> 00:40:04.223
und den internen Zustand,

00:40:04.383 --> 00:40:06.123
wo du auch Deep Links machen kannst auf SPAs.

00:40:06.383 --> 00:40:08.282
Aber das ist nicht so

00:40:08.282 --> 00:40:09.243
gängig, um es mal so zu sagen.

00:40:09.263 --> 00:40:10.522
Was ist jetzt ein Deep Link wieder?

00:40:11.923 --> 00:40:13.822
Wenn du so eine SPA aufrufst,

00:40:13.903 --> 00:40:15.163
dann bist du ja auf

00:40:15.163 --> 00:40:16.482
spa.io

00:40:16.482 --> 00:40:19.522
und dann gehst du da

00:40:19.522 --> 00:40:21.623
in deine Daten rein und

00:40:21.623 --> 00:40:24.183
in die Tabelle und dann gehst du da

00:40:24.183 --> 00:40:25.123
in Zelle A17.

00:40:26.163 --> 00:40:27.962
Und ein Deep Link wäre,

00:40:28.082 --> 00:40:29.723
wenn es eine Möglichkeit gäbe,

00:40:29.723 --> 00:40:31.683
eine URL anzugeben, die auf diese

00:40:31.683 --> 00:41:01.663
und Jochen unterhalten sich über die Programmiersprache Python

00:41:01.683 --> 00:41:03.782
das Problem an dieser Stelle ist, du kannst nicht

00:41:03.782 --> 00:41:05.342
darauf verlinken, du kannst nicht sagen

00:41:05.342 --> 00:41:08.223
das hier und jeder der es abruft

00:41:08.223 --> 00:41:10.082
sieht es dann, wenn er es sehen darf

00:41:10.082 --> 00:41:11.862
immer Modulo dieser

00:41:11.862 --> 00:41:13.822
Berechtigungen

00:41:13.822 --> 00:41:15.123
und der Sichtbarkeit und so weiter

00:41:15.123 --> 00:41:17.723
und das ist ja aber eigentlich eine Sache, die

00:41:17.723 --> 00:41:20.002
in REST APIs schon so

00:41:20.002 --> 00:41:21.643
drin sein sollte, dass du zum einen

00:41:21.643 --> 00:41:23.862
Links machen kannst auf

00:41:23.862 --> 00:41:25.822
Objekte, also

00:41:25.822 --> 00:41:27.183
API slash

00:41:27.183 --> 00:41:28.822
Spreadsheet

00:41:28.822 --> 00:41:31.683
spreadsheetid

00:41:31.683 --> 00:41:32.522
table

00:41:32.522 --> 00:41:34.602
cell

00:41:34.602 --> 00:41:37.383
row17, irgendwie sowas.

00:41:37.923 --> 00:41:39.502
Solltest du prinzipiell machen können

00:41:39.502 --> 00:41:41.383
und auch innerhalb dieser API

00:41:41.383 --> 00:41:43.263
solltest du eigentlich nie

00:41:43.263 --> 00:41:45.763
irgendwie nur IDs angeben.

00:41:46.082 --> 00:41:47.482
Das ist jetzt dann hier,

00:41:47.683 --> 00:41:49.522
da ist der Inhalt 23

00:41:49.522 --> 00:41:51.623
drin, sondern eigentlich solltest du

00:41:51.623 --> 00:41:52.822
angeben, da ist der Inhalt drin,

00:41:53.743 --> 00:41:55.423
der unter folgender URL erreichbar ist.

00:41:57.102 --> 00:41:57.623
Und wenn man

00:41:57.623 --> 00:42:14.943
Wenn man das sauber macht, dann ist das eine ganz, ganz mächtige Sache. Ich versuche das bei meinen APIs immer zu machen, weil das die Entwicklung mit der API wesentlich vereinfacht, weil ich eben nicht wissen muss, was das bedeutet, wenn da drin steht ID 17, sondern ich muss nur einen Link aufrufen können und einen Link aufrufen, das kann ich.

00:42:14.943 --> 00:42:18.002
Das geht, genau. Dann kriegst du das Objekt und weißt, was da drin ist.

00:42:18.102 --> 00:42:19.562
Genau. Und dann kannst du auch weitergucken.

00:42:19.562 --> 00:42:19.643
Ja, aber tatsächlich eben, genau, und das ist halt so der Unterschied, wenn man jetzt RPC machen würde oder so, wenn du jetzt da irgendein Objekt kriegst mit bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm bestimm

00:42:49.562 --> 00:42:52.462
hat es einmal geklappt, aber ansonsten

00:42:52.462 --> 00:42:54.423
also irgendwelche Applikationen,

00:42:54.482 --> 00:42:55.962
die ihr UI dadurch

00:42:55.962 --> 00:42:57.602
aufbauen, dass die irgendwie

00:42:57.602 --> 00:42:59.802
aus einer API irgendwie

00:42:59.802 --> 00:43:01.362
ihre Formulare bekommen und das

00:43:01.362 --> 00:43:04.403
Das hört sich ja grauenhaft an.

00:43:04.462 --> 00:43:06.243
Genau, das hört sich schon ziemlich grauenhaft

00:43:06.243 --> 00:43:07.822
an, ja, das klingt so ein bisschen nach SAP,

00:43:08.223 --> 00:43:10.042
irgendwie alle Sachen sehen irgendwie gleich aus

00:43:10.042 --> 00:43:10.362
und so.

00:43:11.822 --> 00:43:14.062
Alles zur Laufzeit wird das zusammengebaut.

00:43:14.062 --> 00:43:15.862
Ja, also ich meine, es wäre natürlich schön,

00:43:16.022 --> 00:43:17.903
also der Vorteil, den du halt hast, wenn du das machst,

00:43:17.903 --> 00:43:19.643
ist halt, dass auch ältere Browser

00:43:19.643 --> 00:43:21.623
funktionieren können. Du musst halt nicht immer

00:43:21.623 --> 00:43:23.883
irgendwie den Client austauschen

00:43:23.883 --> 00:43:25.663
und gerade wenn du jetzt App-Stores hast oder so,

00:43:25.723 --> 00:43:27.802
wäre es natürlich auch nett, wenn du, wenn Leute

00:43:27.802 --> 00:43:28.462
mit alten

00:43:28.462 --> 00:43:31.842
Client-Anwendungen halt auch deine neue

00:43:31.842 --> 00:43:33.802
Geschichten benutzen können und

00:43:33.802 --> 00:43:35.962
du sozusagen mal so ein bisschen Progressive Enhancement machst

00:43:35.962 --> 00:43:37.842
und die neuen Geräte können

00:43:37.842 --> 00:43:39.743
dann halt den neuen Kram machen und die alten sehen aber

00:43:39.743 --> 00:43:41.183
immer noch die alte Seite sozusagen.

00:43:42.062 --> 00:43:43.623
Tatsächlich glaube ich aber, dass das praktisch

00:43:43.623 --> 00:43:44.423
niemand so macht.

00:43:46.423 --> 00:43:46.822
Ja.

00:43:46.822 --> 00:43:48.683
auch ungeheuer schwierig, das zu machen,

00:43:48.782 --> 00:43:50.763
weil die Interna verändern

00:43:50.763 --> 00:43:52.042
sich ja auch. Also ich meine,

00:43:52.423 --> 00:43:54.623
wir können auch gerne mal noch ein

00:43:54.623 --> 00:43:56.522
Stündchen über API-Versionierung sprechen,

00:43:56.643 --> 00:43:58.423
weil auch da geht es von uns

00:43:58.423 --> 00:43:59.883
eine Meinung dazu.

00:44:02.562 --> 00:44:04.723
Und ich weiß auch mindestens drei verschiedene

00:44:04.723 --> 00:44:05.883
Wege, wie man das machen kann.

00:44:07.782 --> 00:44:08.062
Aber

00:44:08.062 --> 00:44:11.002
ja,

00:44:11.203 --> 00:44:14.482
ich kenne quasi keinen Fall, wo

00:44:14.482 --> 00:44:16.522
es sich lohnen würde, verschiedene API-Versionen

00:44:16.522 --> 00:44:18.782
gleichzeitig laufen zu haben, was ja sehr

00:44:18.782 --> 00:44:19.542
teuer ist erstmal.

00:44:22.822 --> 00:44:24.643
Und deshalb, das mag ein

00:44:24.643 --> 00:44:26.703
heroisches Ideal sein, aber es ist vielleicht

00:44:26.703 --> 00:44:28.123
schwierig, das in der echten Welt zu machen.

00:44:28.123 --> 00:44:30.582
Du müsstest nicht unbedingt

00:44:30.582 --> 00:44:32.743
unterschiedliche API-Versionen, sondern du würdest es halt so machen

00:44:32.743 --> 00:44:34.683
wie bei HTML auch. Du würdest halt sagen, okay,

00:44:34.883 --> 00:44:36.602
hier ist halt ein Attribut und da steht halt

00:44:36.602 --> 00:44:38.703
an dem Attribut noch dran, weil wenn du das in JSON

00:44:38.703 --> 00:44:40.663
machst, nicht in HTML, so ab hier

00:44:40.663 --> 00:44:42.723
nur für Clients mit der Version oder so,

00:44:42.802 --> 00:44:44.723
keine Ahnung, die anderen müssen hier gar nicht gucken, die können das

00:44:44.723 --> 00:44:44.903
nicht.

00:44:46.522 --> 00:44:48.123
Ja, okay, aber dann hast du ja unterschiedliche

00:44:48.123 --> 00:44:49.602
API-Versionen, die halt additiv sind.

00:44:50.243 --> 00:44:51.922
Ja, aber du würdest auch dem alten Client

00:44:51.922 --> 00:44:53.903
das Neue ausliefern und der würde es dann einfach

00:44:53.903 --> 00:44:55.862
ignorieren und dann sagt, oh, das ist für mich nicht interessant.

00:44:56.163 --> 00:44:57.422
Also wie bei HTML ist es ja auch so,

00:44:57.763 --> 00:44:59.942
wenn du ein neues Tag hast, die Browser ignorieren das einfach,

00:45:00.042 --> 00:45:01.703
die es nicht können. Ja, oder auch Header

00:45:01.703 --> 00:45:03.723
generell. Das ist generell eine gute Idee,

00:45:04.143 --> 00:45:05.322
so additive,

00:45:05.962 --> 00:45:07.763
nur die Sachen verarbeiten, die man versteht.

00:45:08.002 --> 00:45:09.802
Also nicht generell, aber in

00:45:09.802 --> 00:45:11.102
vielen Fällen ist das eine gute Idee,

00:45:12.042 --> 00:45:13.322
weil man dann eben diese

00:45:14.203 --> 00:45:15.723
automatische Backwards-Compatibility

00:45:15.723 --> 00:45:17.422
hat oder automatisch Vorwärts-Compatibility,

00:45:17.582 --> 00:45:18.542
je nachdem, wie man das sehen möchte.

00:45:21.723 --> 00:45:21.962
Ja.

00:45:23.462 --> 00:45:24.862
Also irgendwie, also

00:45:24.862 --> 00:45:27.462
die Idee ist irgendwie voll cool, aber

00:45:27.462 --> 00:45:29.502
ehrlich gesagt, ich weiß nicht so richtig. Ich bin mal

00:45:29.502 --> 00:45:31.322
gespannt. Also bei

00:45:31.322 --> 00:45:33.362
jetzt HTML und Web hat es ja eigentlich mal

00:45:33.362 --> 00:45:35.482
geklappt, aber ob das

00:45:35.482 --> 00:45:37.623
wie sich das so in Zukunft entwickelt, keine Ahnung.

00:45:39.743 --> 00:45:41.042
Ja, und andere Dinge

00:45:41.042 --> 00:45:43.522
sozusagen sind auch nicht mehr

00:45:43.522 --> 00:45:45.562
so richtig gut gealtert, fürchte ich. Also so was

00:45:45.562 --> 00:45:47.022
wie zum Beispiel, also eigentlich

00:45:47.022 --> 00:45:49.203
das sind schon nette Ideen, also das

00:45:49.203 --> 00:45:51.183
HTTPS-Dateless ist ja eigentlich cool, das hat

00:45:51.183 --> 00:45:53.362
diverse coole Vorteile, dass

00:45:53.362 --> 00:45:55.462
GET halt immer nur irgendwas

00:45:55.462 --> 00:45:57.302
an Daten liefert und nichts

00:45:57.302 --> 00:45:59.362
ändert, ist auch super cool, weil das bedeutet halt, du kannst

00:45:59.362 --> 00:46:01.562
super cachen. Ja, und kannst

00:46:01.562 --> 00:46:03.522
darauf so oft machen, wie du willst. Kannst du so oft machen, wie du

00:46:03.522 --> 00:46:05.283
willst, voll gut. Das Problem ist nur,

00:46:05.482 --> 00:46:07.522
so inzwischen ist halt

00:46:07.522 --> 00:46:09.123
TLS,

00:46:09.542 --> 00:46:11.163
HTTPS ist halt überall.

00:46:12.582 --> 00:46:13.562
Sollte man auch nicht mehr ohne

00:46:13.562 --> 00:46:14.263
machen. Ja.

00:46:14.263 --> 00:46:25.982
und damit wird das mit der Cachebarkeit und so, das ist halt dann alles so ein bisschen für die Tonne, weil, ja gut, der Browser selber kann es noch Cachen, aber so, dass da irgendwo Der Server kann es Cachen.

00:46:26.342 --> 00:46:29.643
Der Server kann es Cachen, der Client kann es Cachen, aber dazwischen kann es nicht.

00:46:30.982 --> 00:46:42.243
Und ja, damit hat das nicht mehr so eine riesig große Relevanz und das war ja auch in die, ja, das sieht man jetzt auch heute ja, die ganzen, so, ja, Phoenix Live View,

00:46:42.243 --> 00:46:45.643
bei Ripple und Melz gibt es das mit Stimulus und

00:46:45.643 --> 00:46:48.982
diese ganzen Hotwire-Geschichten. In anderen

00:46:48.982 --> 00:46:53.763
Frameworks kommt das jetzt auch, dass man wieder HTML über WebSockers schickt oder so.

00:46:54.542 --> 00:46:58.062
Und einer der Gründe, warum man das anfängt zu machen oder so, ist halt auch, dass es einfach,

00:46:58.143 --> 00:47:00.442
wenn man sich anguckt, was auf der

00:47:00.442 --> 00:47:06.082
Leitung passiert, der totale Wahnsinn ist.

00:47:06.422 --> 00:47:09.683
Weil HTTP stateless ist, muss da halt immer

00:47:09.683 --> 00:47:11.302
irgendwie alles mitgeschickt werden,

00:47:11.743 --> 00:47:13.062
weil, naja, ist ja stateless.

00:47:13.422 --> 00:47:15.643
Ja klar, weiß der nicht, was der schon hat oder nicht.

00:47:15.802 --> 00:47:17.322
Genau, und das

00:47:17.322 --> 00:47:19.623
ist eigentlich total

00:47:19.623 --> 00:47:21.123
ineffizient auch, hätte ich gesagt.

00:47:21.703 --> 00:47:23.442
Und deswegen gehen halt dann viele Richtung,

00:47:23.663 --> 00:47:25.683
ja, nehmen wir doch einfach WebSocket oder so,

00:47:25.683 --> 00:47:27.383
da ist es halt dann nicht mehr stateless.

00:47:28.302 --> 00:47:28.422
Ja.

00:47:30.203 --> 00:47:31.683
Ja, das ist aber auch so eine der,

00:47:32.883 --> 00:47:33.703
jetzt sind wir schon so weit,

00:47:33.743 --> 00:47:36.002
dass wir über die Nachteile von REST-APIs

00:47:36.002 --> 00:47:36.342
sprechen.

00:47:36.342 --> 00:47:42.842
dass diese Objekte so ein bisschen in sich geschlossen sind und auch nicht auf den Anwendungsfall eingehen können

00:47:42.842 --> 00:47:49.062
das ist ja eine der Vorteile von RPC, dass du halt sagst, ich möchte, dass folgende Operation passiert

00:47:49.062 --> 00:47:54.502
und dafür sind die folgenden drei Werte notwendig und dann kriegst du eben die Ergebnisse der Operation

00:47:54.502 --> 00:47:59.082
und es sind dann genau sieben Werte oder so etwas, oder genau dieses Objekt und genau dieses Objekt

00:47:59.082 --> 00:48:05.362
und das hast du jetzt mit REST ja nicht mehr so einfach, mit REST greifst du ja immer quasi auf ganze Ressourcen zu

00:48:05.362 --> 00:48:10.582
oder eben auf Teilressourcen,

00:48:10.703 --> 00:48:14.062
die dann vom Server auf eine gewisse Art und Weise zur Verfügung gestellt werden,

00:48:14.602 --> 00:48:17.022
die aber eventuell gar nichts mit deinem Use Case zu tun haben.

00:48:17.482 --> 00:48:21.002
Also wenn ich jetzt meine gesamte Freundesliste abrufen möchte,

00:48:21.002 --> 00:48:26.903
dann müsste ich prinzipiell alle Links zu meinen Freundesobjekten abrufen

00:48:26.903 --> 00:48:30.542
und dann allen Links folgen und jedes Freundesobjekt einzeln abrufen,

00:48:31.582 --> 00:48:34.143
damit ich meine Freundesliste anzeigen kann.

00:48:34.143 --> 00:48:36.403
was ja absurd ist, weil meine Freundesliste

00:48:36.403 --> 00:48:37.223
ist ja einfach nur

00:48:37.223 --> 00:48:40.183
eine Liste von den Namen der Freunde

00:48:40.183 --> 00:48:40.743
und fertig.

00:48:43.502 --> 00:48:44.203
Ja, ja.

00:48:44.502 --> 00:48:46.283
Ja, ich meine,

00:48:46.403 --> 00:48:47.822
man würde sich dann halt vielleicht wünschen,

00:48:47.962 --> 00:48:50.263
eben auch gerade, wenn man dann jetzt unterschiedliche Clients hat,

00:48:50.442 --> 00:48:52.042
die unterschiedliche Sachen darstellen,

00:48:52.482 --> 00:48:54.102
dass man als Client kontrollieren kann, was

00:48:54.102 --> 00:48:56.062
dann da kommt und das je nachdem,

00:48:56.143 --> 00:48:56.802
was man halt braucht.

00:48:58.203 --> 00:48:59.763
Aber dann hat man im Grunde

00:48:59.763 --> 00:49:02.102
keine Restschnellschwelle und dann hat man

00:49:02.102 --> 00:49:04.002
irgendwie sowas wie eine Datenbank

00:49:04.002 --> 00:49:06.062
Schnittstelle. Ja, genau.

00:49:06.163 --> 00:49:07.362
Und das ist ja auch der Grund, warum

00:49:07.362 --> 00:49:09.522
es diese Weiterentwicklungen gibt,

00:49:09.783 --> 00:49:11.022
die du jetzt gleich erklärst.

00:49:12.763 --> 00:49:13.283
Genau.

00:49:13.783 --> 00:49:15.123
Wo der Client eben

00:49:15.123 --> 00:49:18.082
kontrollieren kann, welche Attribute

00:49:18.082 --> 00:49:20.082
geschickt werden und welche Objekte geschickt werden.

00:49:20.643 --> 00:49:22.062
Weil es eben Use Cases

00:49:22.062 --> 00:49:24.042
gibt, in denen nicht

00:49:24.042 --> 00:49:26.102
das ganze Objekt interessant ist und

00:49:26.102 --> 00:49:27.883
oder sehr viele verschiedene Objekte

00:49:27.883 --> 00:49:29.903
interessant sind. Ja, nur

00:49:29.903 --> 00:49:32.322
dann würde, also aus der Sicht eines Restpuristen

00:49:32.322 --> 00:49:34.263
würde ich jetzt sagen, ja gut, aber

00:49:34.263 --> 00:49:36.462
da macht der Client ja schon viel zu viel.

00:49:36.942 --> 00:49:38.462
Das hat den Client alles nichts anzugehen,

00:49:38.542 --> 00:49:39.582
das muss alles der Server machen.

00:49:40.982 --> 00:49:42.243
Da hat der

00:49:42.243 --> 00:49:44.102
Client viel zu viel State und

00:49:44.102 --> 00:49:46.102
der ist ja, ja,

00:49:46.723 --> 00:49:47.922
und das geht ja alles gar nicht.

00:49:48.683 --> 00:49:50.042
Ja, aber das ist ja, also ich meine,

00:49:50.442 --> 00:49:51.542
das ist ein bisschen unrealistisch.

00:49:51.542 --> 00:49:52.842
Gegen Regen argumentieren.

00:49:54.243 --> 00:49:55.663
Es ist schlecht, dass es Regen gibt

00:49:55.663 --> 00:49:57.223
und der fällt aus dem Himmel runter

00:49:57.223 --> 00:49:59.342
und der macht alles nass, aber es ist halt so.

00:50:00.342 --> 00:50:01.582
Ja, ja.

00:50:02.322 --> 00:50:05.922
Das gibt es halt

00:50:05.922 --> 00:50:09.322
Es ist nicht schwer sich vorzustellen, dass es Leute gibt

00:50:09.322 --> 00:50:11.022
die ihren Freunden Nachrichten schicken wollen

00:50:11.022 --> 00:50:13.842
und schon brauche ich eine Liste der Leute, denen ich Nachrichten schicken kann

00:50:13.842 --> 00:50:20.123
Da hilft mir aller Rest Purismus nichts

00:50:20.123 --> 00:50:22.223
weil das müsste dann irgendwie abdecken

00:50:22.223 --> 00:50:28.482
Es gibt auch Fälle

00:50:28.482 --> 00:50:41.743
Sagen wir mal so, um es positiv zu formulieren, für manche Anwendungsfälle braucht es ein bisschen Umdenken von diesem Prozeduraldenken.

00:50:42.143 --> 00:50:51.042
Wir als Programmierer haben ja oft so ein prozedurales Denken. Ich möchte, dass jetzt irgendwas passiert und deshalb rufe ich diese Funktion auf.

00:50:51.223 --> 00:50:58.302
In Python ist ja im Wesentlichen alles, was man macht, irgendwelche Funktionen aufrufen und innerhalb der Funktionen passiert dann irgendwas anderes.

00:50:58.482 --> 00:51:01.842
und das ist jetzt bei REST ganz anders.

00:51:02.002 --> 00:51:05.763
Bei REST sage ich einfach nur, es soll dieses Objekt geben.

00:51:06.643 --> 00:51:07.442
Mehr kann ich ja nicht sagen.

00:51:08.942 --> 00:51:11.322
Und wenn ich jetzt eben möchte, dass was passiert,

00:51:11.522 --> 00:51:14.283
zum Beispiel, dass eine Nachricht geschickt wird,

00:51:15.223 --> 00:51:17.522
dann sage ich nicht, schicke diese Nachricht an,

00:51:19.022 --> 00:51:22.502
sondern es soll eine Nachricht geben,

00:51:22.502 --> 00:51:25.163
die an deren Empfänger folgender Empfänger ist

00:51:25.163 --> 00:51:26.582
und deren folgender Text ist

00:51:26.582 --> 00:51:28.942
und deren Absendedatum

00:51:28.942 --> 00:51:30.342
gerade jetzt ist.

00:51:31.842 --> 00:51:34.683
das erfordert ein gewisses Umdenken,

00:51:34.883 --> 00:51:36.663
wenn es eben was inhärent

00:51:36.663 --> 00:51:38.883
Aktives ist, was passiert.

00:51:40.842 --> 00:51:42.582
Bei Nachrichten schicken ist es schon,

00:51:42.663 --> 00:51:44.322
könnte man schon sagen, okay,

00:51:44.862 --> 00:51:46.663
das ist jetzt nicht was, was passiert, sondern es ist halt

00:51:46.663 --> 00:51:48.143
ein Eintrag in der Datenbank und ich sage,

00:51:48.602 --> 00:51:50.903
füge dieses Nachrichtenobjekt

00:51:50.903 --> 00:51:52.862
hinzu. Aber wenn das irgendwas ist,

00:51:52.862 --> 00:51:54.123
was steuert, wenn ich

00:51:54.123 --> 00:51:54.123


00:51:54.123 --> 00:52:24.102
und Jochen unterhalten sich über die Programmiersprache Python

00:52:24.123 --> 00:52:26.302
Das ist so ein bisschen, ja...

00:52:26.302 --> 00:52:26.302
Es erfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordfordford

00:52:54.123 --> 00:52:54.883
anschalten

00:52:54.883 --> 00:52:57.842
Wunschobjekt oder irgendwie sowas.

00:52:58.082 --> 00:53:00.183
Dass du sozusagen Funktionen als

00:53:00.183 --> 00:53:01.842
Objekte siehst und dann eben ein neues

00:53:01.842 --> 00:53:03.383
Funktionsobjekt erzeugst.

00:53:03.883 --> 00:53:06.123
Aber das ist ja schon ein bisschen beschummelt, oder Jochen?

00:53:06.643 --> 00:53:08.403
Fühlst du dich da gut dabei, wenn du sowas machst?

00:53:09.223 --> 00:53:10.322
Nee, auf der anderen

00:53:10.322 --> 00:53:11.183
Seite würde ich sagen,

00:53:11.623 --> 00:53:14.102
worauf es hinausläuft, die grundsätzlichen

00:53:14.102 --> 00:53:16.022
Operationen, die man tun kann, sind halt

00:53:16.022 --> 00:53:18.062
das ist mal, ich weiß nicht, das hatten wir bestimmt auch schon mal

00:53:18.062 --> 00:53:19.362
ein paar Mal erwähnt oder so, ist halt CRUD.

00:53:20.502 --> 00:53:22.123
Create, Read,

00:53:22.383 --> 00:53:23.183
Update, Delete.

00:53:24.123 --> 00:53:28.562
und ich finde es immer wieder erstaunlich, was sich alles darauf mappen lässt, weil tatsächlich...

00:53:28.562 --> 00:53:29.903
Ja, alles, du kannst alles darauf mappen.

00:53:29.962 --> 00:53:30.663
Ja, ja, gut, aber...

00:53:30.663 --> 00:53:32.302
Alles, was in dem Computer drin ist, kannst du darauf mappen.

00:53:32.502 --> 00:53:43.383
Es geht sogar halbwegs elegant, also oft ist es tatsächlich so, dass es auf den tatsächlichen Anwendungsfall eigentlich ganz gut, also oft passt es einfach ganz gut und man ist eigentlich dann zufrieden.

00:53:43.383 --> 00:53:51.703
Gut, dann natürlich in manchen Spezialfällen, da muss man halt dann überlegen und tricksen, weil es dann so nicht einfach geht, ja.

00:53:51.703 --> 00:53:54.542
aber prinzipiell

00:53:54.542 --> 00:53:55.942
ja

00:53:55.942 --> 00:53:57.422
das ist auch immer etwas was man

00:53:57.422 --> 00:54:00.263
es gibt schon so Sachen

00:54:00.263 --> 00:54:02.482
wo ich mir da sehr schwer tue

00:54:02.482 --> 00:54:06.522
wo eben was passieren soll

00:54:06.522 --> 00:54:08.683
wo mein gedankliches Modell nicht ist

00:54:08.683 --> 00:54:10.703
da wird ein Datensatz

00:54:10.703 --> 00:54:12.183
erzeugt oder bearbeitet sondern

00:54:12.183 --> 00:54:13.442
da soll jetzt etwas passieren

00:54:13.442 --> 00:54:16.283
ich schicke ein Bild an eine

00:54:16.283 --> 00:54:18.643
Bilderkennungs-API dann ist es für mich nicht

00:54:18.643 --> 00:54:20.663
ich möchte dass es

00:54:20.663 --> 00:54:50.643
und Jochen unterhalten sich über die Programmiersprache Python

00:54:50.663 --> 00:54:51.362
Prozedurale.

00:54:53.403 --> 00:54:55.403
Ein Funktionsobjekt

00:54:55.403 --> 00:54:57.442
mit folgenden Parametern wurde angelegt.

00:54:58.383 --> 00:54:59.383
Ja, das ist natürlich

00:54:59.383 --> 00:55:00.903
irgendwie... Also ja, nee,

00:55:01.022 --> 00:55:03.322
es gibt Dinge, die da nicht so gut reinpassen.

00:55:03.922 --> 00:55:05.042
Ich weiß gerade so was wie,

00:55:05.123 --> 00:55:07.462
wenn man jetzt Blobs hat, eben Bilder oder so was.

00:55:08.982 --> 00:55:09.123
Da

00:55:09.123 --> 00:55:11.143
ist es sowieso schwierig.

00:55:11.903 --> 00:55:12.062
Genau.

00:55:13.962 --> 00:55:15.422
Ist ja auch dann ganz schwierig.

00:55:15.763 --> 00:55:16.842
Das kriegst du ja auch nicht per Get.

00:55:18.263 --> 00:55:18.703
Natürlich.

00:55:18.703 --> 00:55:21.263
natürlich. Du kriegst es auf jeden Fall nicht mehr bei JSON.

00:55:21.422 --> 00:55:22.883
Du musst dann halt, wenn du so ByteRange

00:55:22.883 --> 00:55:24.663
verpasst, ob du irgendwelche Blobs machst, dann...

00:55:24.663 --> 00:55:26.743
Moment, wenn du über ByteRange denkst,

00:55:26.743 --> 00:55:29.263
also ein Blob ist irgendwie eine Art Dateiobjekt

00:55:29.263 --> 00:55:30.743
oder sowas. Ja, also zum Beispiel

00:55:30.743 --> 00:55:33.322
so was wie eine Podcast-Episode. Ein Binary Large Object.

00:55:33.663 --> 00:55:33.783
Ja.

00:55:35.163 --> 00:55:36.862
Also eine Podcast-Episode und du willst jetzt

00:55:36.862 --> 00:55:47.405
eine Minute drei anfangen zu h weil da beginnt der interessante Teil REST Aber das ist ja tats bei REST nicht

00:55:47.405 --> 00:55:49.285
vorgegeben, welche Daten

00:55:49.285 --> 00:55:51.665
Strukturen du verwendest, sondern ganz im Gegenteil.

00:55:51.845 --> 00:55:53.485
Jeder Request soll ja immer einen

00:55:53.485 --> 00:55:55.225
Media Type haben und dann halt

00:55:55.225 --> 00:55:56.845
kannst du es in verschiedenen Sachen abrufen.

00:55:57.045 --> 00:55:58.965
Also REST ist gar nicht nur JSON.

00:56:00.185 --> 00:56:00.985
Nee, nee, kann auch was anderes.

00:56:01.725 --> 00:56:02.645
Kann auch XML sein.

00:56:03.385 --> 00:56:04.085
Wenn du willst.

00:56:04.085 --> 00:56:04.965
Hurra!

00:56:05.845 --> 00:56:07.985
Aber das ist ja eine der Eigenschaften vom Web,

00:56:08.085 --> 00:56:09.745
dass das Web eben nicht nur

00:56:09.745 --> 00:56:12.285
JSON übertragen kann, sondern es kann alles übertragen.

00:56:12.745 --> 00:56:14.125
Und das soll hier eben auch mit

00:56:14.125 --> 00:56:15.965
reingehen und das ist auch eine der großen

00:56:15.965 --> 00:56:18.045
Stärken, die zum Beispiel in Django

00:56:18.045 --> 00:56:19.805
hat man ja diese wunderbare

00:56:19.805 --> 00:56:21.245
Bibliothek Django REST Framework.

00:56:22.045 --> 00:56:23.845
Ich erinnere mich noch, als ich die

00:56:23.845 --> 00:56:25.825
zum ersten Mal gefunden habe und es war so

00:56:25.825 --> 00:56:27.705
eine Offenbarung, dass

00:56:27.705 --> 00:56:29.745
sowas geht und dann so schöne

00:56:29.745 --> 00:56:31.685
Schnellstellen macht und die einen ganz

00:56:31.685 --> 00:56:33.825
einfachen Trick verwenden, Browser

00:56:33.825 --> 00:56:36.145
senden als Media Type

00:56:36.145 --> 00:56:38.045
oder als Preferred Media Type

00:56:38.045 --> 00:56:39.665
immer Application HTML mit

00:56:39.665 --> 00:56:41.365
und

00:56:41.365 --> 00:56:44.185
so Schnittstellen haben ja normalerweise

00:56:44.185 --> 00:56:44.965
Application JSON

00:56:44.965 --> 00:56:48.025
und wenn du

00:56:48.025 --> 00:56:49.245
aber Application HTML

00:56:49.245 --> 00:56:51.785
abrufst von dieser mit

00:56:51.785 --> 00:56:53.885
Django REST Framework erzeugten Schnittstelle, dann

00:56:53.885 --> 00:56:55.665
kriegst du das Ergebnis als

00:56:55.665 --> 00:56:56.345
Webseite.

00:56:57.285 --> 00:56:59.845
Mit allen Bells und Whistles, die es so gibt, also mit

00:56:59.845 --> 00:57:01.945
Formularen und mit Login

00:57:01.945 --> 00:57:03.965
Anzeige und mit Dokumentation

00:57:03.965 --> 00:57:06.105
automatisch angezeigt und das ist eine super Sache.

00:57:06.425 --> 00:57:07.745
Du kannst verschiedene

00:57:07.745 --> 00:57:09.425
Media Types anfordern.

00:57:09.825 --> 00:57:11.725
Und auch Juggeress Framework stellt ja durch diese

00:57:11.725 --> 00:57:13.565
Serializer, die man normalerweise hat,

00:57:14.725 --> 00:57:15.925
das ist wie das Formular, was man

00:57:15.925 --> 00:57:17.985
sonst so kennt. Genau, der stellt

00:57:17.985 --> 00:57:19.845
dieses Formular zur Verfügung, der stellt auch

00:57:19.845 --> 00:57:21.025
den JSON-Datentyp zur Verfügung,

00:57:21.165 --> 00:57:23.645
es gibt auch die Möglichkeit, da XML

00:57:23.645 --> 00:57:25.705
einzustellen, dann kriegst du halt XML-Objekte, die

00:57:25.705 --> 00:57:27.885
auf irgendeine Art und Weise formatiert

00:57:27.885 --> 00:57:29.805
sind. Du kannst auch selber einen schreiben, der

00:57:29.805 --> 00:57:30.825
halt irgendwas anderes macht.

00:57:31.945 --> 00:57:33.425
und das ist auch eine der Stärken.

00:57:34.105 --> 00:57:35.705
Das bedeutet ja aber nicht, dass jede

00:57:35.705 --> 00:57:37.265
Antwort auf ein Get immer

00:57:37.265 --> 00:57:39.265
ein JSON sein muss. Das bedeutet halt nur,

00:57:40.065 --> 00:57:41.585
dass es

00:57:41.585 --> 00:57:43.625
Media Types gibt, die von verschiedenen Branches

00:57:43.625 --> 00:57:45.705
unterstützt werden und andere werden halt nicht unterstützt.

00:57:45.825 --> 00:57:47.745
Und gerade bei so einem Blob-Objekt wäre es

00:57:47.745 --> 00:57:48.185
halt dann

00:57:48.185 --> 00:57:50.205
Application

00:57:50.205 --> 00:57:53.165
Binary, weiß ich nicht.

00:57:53.445 --> 00:57:53.765
Octet.

00:57:54.765 --> 00:57:57.205
Ja, ja, ja.

00:57:57.625 --> 00:57:59.745
Nee, stimmt schon. Also insofern würde das da auch reinpassen.

00:58:00.305 --> 00:58:01.665
Ganz kurz nochmal, Octet-Stream,

00:58:01.665 --> 00:58:02.325
was ist das denn?

00:58:03.365 --> 00:58:05.665
Ja, Octet ist der coolere Name

00:58:05.665 --> 00:58:07.665
für Byte. Also es sind einfach

00:58:08.205 --> 00:58:09.505
Binärdaten, die übertragen werden.

00:58:09.565 --> 00:58:10.665
Also zwei hoch...

00:58:10.665 --> 00:58:14.045
Das ist so der Fallback-Type.

00:58:14.785 --> 00:58:15.625
Wenn ich nicht weiß,

00:58:15.685 --> 00:58:17.265
was es ist, dann sind es halt irgendwie Binärdaten.

00:58:17.385 --> 00:58:19.385
Und das heißt, als MIME-Typ oder als

00:58:19.385 --> 00:58:21.225
Datentyp heißt es Application

00:58:21.225 --> 00:58:23.365
slash OctetStream. Heißt einfach nur

00:58:23.365 --> 00:58:24.745
irgendwelche Daten, keine Ahnung.

00:58:25.225 --> 00:58:26.245
Okay, OctetStream.

00:58:27.405 --> 00:58:29.285
Auch gerade jetzt zum ersten Mal drüber gestolpert, das ist ja Wahnsinn.

00:58:29.645 --> 00:58:30.985
Wie lange macht man das eigentlich schon?

00:58:31.105 --> 00:58:31.545
Ich weiß es nicht.

00:58:31.665 --> 00:58:33.045
zu lange.

00:58:35.305 --> 00:58:36.485
Also ja, okay,

00:58:36.605 --> 00:58:39.745
dann sind wir ja schon wieder bei Python angekommen.

00:58:40.145 --> 00:58:41.765
Wir hatten aber die Methoden

00:58:41.765 --> 00:58:43.225
gerade alle so einmal durch.

00:58:43.505 --> 00:58:45.345
Hatten wir alle? Also Options gibt es glaube ich noch.

00:58:45.565 --> 00:58:46.685
Dann gibt das auch REST, oder?

00:58:47.265 --> 00:58:49.205
Options ist WeGet nur ohne Inhalt.

00:58:49.325 --> 00:58:51.705
Das ist nur, wenn man sozusagen die Header abrufen möchte,

00:58:51.945 --> 00:58:53.565
um zum Beispiel die Datentypen

00:58:53.565 --> 00:58:55.805
rauszufinden oder die verfügbaren Datentypen rauszufinden.

00:58:55.845 --> 00:58:57.245
Das heißt, man kann quasi nach Options fragen

00:58:57.245 --> 00:58:58.905
und dann bekommt man alle Optionen, die

00:58:58.905 --> 00:59:01.365
Datentypen bereichern.

00:59:01.365 --> 00:59:05.145
Genau, das ist so wie ein Get, das ist genauso wie ein Get, nur dass der den Inhalt nicht mitschickt.

00:59:05.505 --> 00:59:15.145
Das wäre zum Beispiel, wenn der Jochen jetzt seine Podcast-Episode abrufen möchte und weiß, dass das eine 2-Stunden-Episode ist, also eine von den kurzen.

00:59:19.125 --> 00:59:20.365
Geradezu mickrig, kurzen.

00:59:21.185 --> 00:59:27.145
Meine Frau hat sich vorhin darüber lustig gemacht, dass wir so lange eine Episode aufnehmen, aber ich habe ihr gesagt, das ist halt so.

00:59:27.145 --> 00:59:30.885
Dann möchte ich eben

00:59:30.885 --> 00:59:32.165
nicht sofort die gesamte

00:59:32.165 --> 00:59:34.365
möchte ich nicht diese ganze

00:59:34.365 --> 00:59:36.865
Episode auf einmal abrufen, sondern ich möchte

00:59:36.865 --> 00:59:38.765
erstmal sehen, ob ich die überhaupt verwenden kann

00:59:38.765 --> 00:59:40.905
und dann schicke ich da ein Options-Request

00:59:40.905 --> 00:59:42.885
hin und dann sagt mir der Server halt, ja, der hat

00:59:42.885 --> 00:59:44.825
so und so viel Bytes und

00:59:44.825 --> 00:59:46.585
der Content-Type ist so und so

00:59:46.585 --> 00:59:48.625
und dann kann ich sozusagen

00:59:48.625 --> 00:59:50.385
ausprobieren, ob

00:59:50.385 --> 00:59:52.885
diese Anfrage sinnvoll ist

00:59:52.885 --> 00:59:54.025
Ja, okay

00:59:54.025 --> 00:59:57.085
Interessant

00:59:57.085 --> 01:00:00.025
Aber um jetzt wieder zu Arpies

01:00:00.025 --> 01:00:02.625
Rest-Arpies zurückzukommen in Python

01:00:02.625 --> 01:00:04.485
Also Django Rest Framework haben wir gerade erwähnt

01:00:04.485 --> 01:00:06.425
Also da wir alle gerne Django machen

01:00:06.425 --> 01:00:07.865
ist das glaube ich einer der Ways to go

01:00:07.865 --> 01:00:09.365
Das ist tatsächlich auch ziemlich großartig

01:00:09.365 --> 01:00:11.265
Das ist auch so ein Ding

01:00:11.265 --> 01:00:13.965
Ich weiß nicht, ich glaube das ist auch so ein

01:00:13.965 --> 01:00:16.325
wiederkehrendes Thema, das habe ich jetzt auch

01:00:16.325 --> 01:00:18.025
von anderen schon gehört

01:00:18.025 --> 01:00:20.445
und das war bei mir so und vielleicht auch bei

01:00:20.445 --> 01:00:20.885
anderen noch

01:00:20.885 --> 01:00:24.405
Also oft sind so die ersten gut

01:00:24.405 --> 01:00:26.405
funktionierenden Projekte irgendwas mit

01:00:26.405 --> 01:00:28.425
Jungle REST Framework bei vielen Leuten gewesen.

01:00:28.765 --> 01:00:30.345
Ich weiß nicht so genau, woran das liegt,

01:00:30.645 --> 01:00:31.925
aber tatsächlich würde ich jetzt mal so,

01:00:32.425 --> 01:00:34.085
okay, keine Ahnung, also ich habe ja

01:00:34.085 --> 01:00:34.565
Wirtschaft,

01:00:35.185 --> 01:00:38.365
mag daran liegen, dass das super ist, aber auch, dass es halt

01:00:38.365 --> 01:00:40.425
einfach, dass man da dann

01:00:40.425 --> 01:00:42.425
anfängt, in einem etwas interessanteren Markt zu sein,

01:00:42.505 --> 01:00:44.525
weil das, was man sonst

01:00:44.525 --> 01:00:45.365
so sieht, also

01:00:45.365 --> 01:00:47.605
wenn du,

01:00:48.325 --> 01:00:49.845
keine Ahnung, also das, was halt so,

01:00:50.605 --> 01:00:51.945
gibt es ja viele,

01:00:52.105 --> 01:00:54.265
die so WordPress-Seiten machen oder so,

01:00:54.365 --> 01:00:55.025
keine Ahnung, Zeugs,

01:00:55.025 --> 01:01:00.765
und da bist du halt in einem sehr unglücklichen Quadranten aus meiner Perspektive.

01:01:00.925 --> 01:01:02.605
Das ist halt irgendwie Low Budget.

01:01:03.965 --> 01:01:06.985
Die Kunden sind üblicherweise nicht bereit, da so wahnsinnig viel Geld auszugeben.

01:01:07.425 --> 01:01:09.245
Ja, es war früher ein besserer Markt.

01:01:09.505 --> 01:01:12.825
Ja, kann auch sein, dass es mal gut war, aber ich glaube, mittlerweile ist es nicht mehr so richtig toll.

01:01:13.225 --> 01:01:17.665
Dann ist es auch Low Value, weil es ist einfach nicht so geil.

01:01:17.665 --> 01:01:23.385
Es ist meistens irgendwelche, naja, doch eher so technisch herausgeforderte.

01:01:23.385 --> 01:01:28.605
Kommt dann über die Add-ons, glaube ich, wenn du dann noch ein Magento dran machen kannst, dann bist du wieder...

01:01:28.605 --> 01:01:32.765
Genau, dann kannst du natürlich so lange Plugins installieren, bis es dann vielleicht doch funktioniert.

01:01:33.145 --> 01:01:38.045
Das Problem dabei ist, dann bist du aber auch bei einem anderen unangenehmen Attribut,

01:01:38.105 --> 01:01:41.265
nämlich ist es dann kompliziert und schwierig, das irgendwie richtig hinzukriegen.

01:01:41.565 --> 01:01:47.445
Das heißt, es ist schlecht bezahlt, du kriegst nicht so viel richtig Wert hin und es ist auch noch schwierig.

01:01:48.125 --> 01:01:51.885
Das ist einfach ein unangenehmer Ort, würde ich jetzt mal so sagen.

01:01:51.885 --> 01:01:53.485
während wenn du halt

01:01:53.485 --> 01:01:56.345
dann sowas machst wie Django REST Framework

01:01:56.345 --> 01:01:58.265
oder so, da ist

01:01:58.265 --> 01:02:00.165
plötzlich irgendwie, da ist richtig Wert drin

01:02:00.165 --> 01:02:02.025
wenn da irgendwie die Apps von Leuten

01:02:02.025 --> 01:02:03.085
richtig gut funktionieren

01:02:03.085 --> 01:02:06.385
da suchen Leute

01:02:06.385 --> 01:02:07.985
händeringend, da sind dann die Preise

01:02:07.985 --> 01:02:09.185
irgendwie anders und

01:02:09.185 --> 01:02:12.105
es generiert halt auch irgendwie ordentlich

01:02:12.105 --> 01:02:14.065
Mehrwert, wenn das halt gut funktioniert

01:02:14.065 --> 01:02:15.945
und man ein nettes Interface hat, wo man

01:02:15.945 --> 01:02:17.925
die API irgendwie sich angucken kann und so

01:02:17.925 --> 01:02:19.765
und ja

01:02:19.765 --> 01:02:22.125
Das funktioniert dann plötzlich irgendwie, würde ich mal so

01:02:22.125 --> 01:02:23.005
sagen.

01:02:23.945 --> 01:02:27.665
Ja, mit Django ist das echt tatsächlich ganz nett.

01:02:27.765 --> 01:02:30.265
Ich habe mal so ein bisschen geguckt, was tatsächlich in der Zukunft

01:02:30.265 --> 01:02:31.245
noch so geplant ist.

01:02:32.185 --> 01:02:34.045
Und da stehen tatsächlich relativ nette Dinge drin.

01:02:34.145 --> 01:02:36.005
Zum Beispiel Realtime API Support

01:02:36.005 --> 01:02:37.645
using WebSockets.

01:02:38.985 --> 01:02:40.125
Ja, dann mit

01:02:40.125 --> 01:02:41.945
Django Channels in Zusammenhang.

01:02:42.345 --> 01:02:43.985
Better Authentication by Default.

01:02:44.085 --> 01:02:45.545
Also die wollen vielleicht sogar Jot

01:02:45.545 --> 01:02:48.145
und Core Support in das Core Package

01:02:48.145 --> 01:02:50.325
reinbringen, wo wir eben schon kurz

01:02:50.325 --> 01:02:52.065
sprachen. Das klingt doch ganz interessant.

01:02:53.645 --> 01:02:54.285
Was war das?

01:02:54.405 --> 01:02:55.465
Wo wir gerade...

01:02:55.465 --> 01:02:58.065
Dominik,

01:02:58.145 --> 01:02:59.745
ich habe gleich noch eine

01:02:59.745 --> 01:03:02.045
kleine Randnotiz.

01:03:02.045 --> 01:03:04.085
Was war das für eine Authentifizierung?

01:03:04.305 --> 01:03:05.325
Genau, was war das für eine Authentifizierung?

01:03:05.325 --> 01:03:06.525
.JWT.

01:03:07.825 --> 01:03:08.725
Ah, echt?

01:03:09.945 --> 01:03:10.885
JSON Web Token.

01:03:11.945 --> 01:03:14.125
Aber da gibt es ja Bibliotheken.

01:03:14.265 --> 01:03:15.145
Also ich meine, das ist ja nur

01:03:15.145 --> 01:03:17.565
ein PIP-Install entfernt.

01:03:17.565 --> 01:03:19.005
Ja, aber da gibt es halt verschiedene

01:03:19.005 --> 01:03:20.525
nicht so gute

01:03:20.525 --> 01:03:24.505
Varianten.

01:03:24.805 --> 01:03:26.185
Die sind alle so ein bisschen...

01:03:26.185 --> 01:03:29.125
Ja, aber das Problem ist halt irgendwie, dass der Standard wohl nicht okay ist

01:03:29.125 --> 01:03:30.765
und dann ist es halt schwierig, dass...

01:03:30.765 --> 01:03:32.965
Die Frage ist, warum der Standard nicht okay ist, wenn ich es richtig verstanden habe,

01:03:33.045 --> 01:03:35.245
weil es verschiedene Möglichkeiten gibt, diese Schlüssel zu erzeugen

01:03:35.245 --> 01:03:36.545
oder über diese Token zu erzeugen.

01:03:36.765 --> 01:03:38.185
Weil es so viele Konfigurationen gibt.

01:03:38.425 --> 01:03:40.765
Weil du sozusagen so

01:03:40.765 --> 01:03:42.965
Soundgrade-Angriffe machen kannst. Du kannst dem Server

01:03:42.965 --> 01:03:45.045
sagen, ja, schön, dass du

01:03:45.045 --> 01:03:46.265
diese ganzen sicheren Methoden hast.

01:03:46.265 --> 01:03:48.865
Ich bin ein kleiner, dummer Client. Ich kann das leider alles nicht.

01:03:49.185 --> 01:03:50.045
Ich unterstütze die alle nicht.

01:03:50.205 --> 01:03:52.845
Ich unterstütze nur etwas, was halt

01:03:52.845 --> 01:03:54.965
im Standard definiert ist,

01:03:55.085 --> 01:03:56.985
was aber super unsicher ist. Und dann nutze ich aus,

01:03:57.025 --> 01:03:58.865
dass es unsicher ist. Und das ist natürlich

01:03:58.865 --> 01:03:59.865
kacke, wenn das im Standard steht.

01:03:59.985 --> 01:04:00.545
Das kannst du machen.

01:04:01.605 --> 01:04:04.925
Du musst dann deinen Server so

01:04:04.925 --> 01:04:06.885
konfigurieren, dass der die Sachen nicht annimmt,

01:04:07.025 --> 01:04:09.125
aber es ist relativ schwierig herauszufinden,

01:04:09.245 --> 01:04:11.205
was jetzt gerade alles schon unsicher ist.

01:04:12.105 --> 01:04:12.625
Also das heißt,

01:04:12.625 --> 01:04:14.525
es geht darum, welche Algorithmen der nehmen kann,

01:04:14.525 --> 01:04:16.725
zum Bereitstellen dieser Token, dass man den nicht zurückrechnen kann?

01:04:19.025 --> 01:04:20.665
Ja, zum einen das und zum anderen auch

01:04:20.665 --> 01:04:22.765
die Token Art. Es gibt ja signierte Token

01:04:22.765 --> 01:04:24.685
und unsignierte Token und wenn der Client halt

01:04:24.685 --> 01:04:26.365
sagt, ich kann nur die unsignierten.

01:04:27.225 --> 01:04:28.785
Und der Server ist so eingestellt,

01:04:28.885 --> 01:04:30.625
dass er auch die unsignierten annimmt, dann nimmt er halt

01:04:30.625 --> 01:04:32.285
auch die unsignierten an. Und dann irgendwie so einen kleinen

01:04:32.285 --> 01:04:34.585
Verschlüsselungsalgorithmus nimmt, den man irgendwie in der Rainbow Table

01:04:34.585 --> 01:04:35.625
nachgucken kann oder sowas, ja okay.

01:04:36.405 --> 01:04:38.585
Ja, oder halt auch gar keinen, wenn du sagst, naja,

01:04:38.625 --> 01:04:39.565
Verschlüsselung, naja, kann ich nicht.

01:04:42.085 --> 01:04:43.125
Das ist eben

01:04:43.125 --> 01:04:43.965
wirklich so, die

01:04:43.965 --> 01:04:48.525
die Frage, was ist jetzt gerade der aktuelle Zustand der Sicherheit?

01:04:48.665 --> 01:04:50.805
Und eigentlich müsste man sich da sehr gut drum kümmern.

01:04:51.445 --> 01:04:55.285
Ja, und ich weiß nur mal, so ganz im Detail kann ich es nicht.

01:04:55.385 --> 01:04:57.565
Ich weiß nur, dass Leute immer sagen, oh mein Gott, das ist alles schrecklich.

01:04:58.625 --> 01:05:04.825
Und JVT, also von ihm, gab es irgendwie einen Post auf der Django-Mailing-Liste von James Bennett, glaube ich,

01:05:04.825 --> 01:05:08.485
wo er mehr oder weniger klipp und klar gesagt hat, JVT werden wir in Django niemals machen.

01:05:08.925 --> 01:05:09.885
Das ist irgendwie...

01:05:09.885 --> 01:05:10.225
Jott?

01:05:10.925 --> 01:05:11.065
Hm?

01:05:11.245 --> 01:05:11.485
Jott?

01:05:13.125 --> 01:05:13.565
Was ist das?

01:05:13.565 --> 01:05:17.245
Dominik, du bist der Einzige, der Jot sagt.

01:05:17.565 --> 01:05:20.545
Ich habe das im Blogpost gelesen von Toni, der das schrieb.

01:05:20.685 --> 01:05:21.105
Ah, okay.

01:05:21.405 --> 01:05:22.845
Vielleicht ist das richtig, ich weiß es nicht.

01:05:25.325 --> 01:05:25.965
Schöne Grüße.

01:05:26.145 --> 01:05:27.125
Ich sage immer Jason Webtoon.

01:05:27.865 --> 01:05:28.525
Jason Webtoon.

01:05:28.545 --> 01:05:29.505
Ich sage immer Jason Webtoon.

01:05:32.605 --> 01:05:35.325
Genau, jedenfalls ist da die Ansage so,

01:05:35.405 --> 01:05:37.885
das Protokoll ist scheiße, das machen wir nicht.

01:05:38.825 --> 01:05:40.205
Was ist denn die Alternative, Jochen?

01:05:40.205 --> 01:05:42.805
Das ist halt die offizielle Alternative,

01:05:43.465 --> 01:05:44.665
jedenfalls,

01:05:44.805 --> 01:05:47.045
so wie es in dem offiziellen

01:05:47.045 --> 01:05:49.265
Django-Podcast, Django-Chat

01:05:49.265 --> 01:05:50.505
von Carlton Gibson,

01:05:50.725 --> 01:05:52.185
der offiziellen Django-Maintenner,

01:05:52.745 --> 01:05:55.165
der übrigens ein total netter Kerl ist.

01:05:55.165 --> 01:05:55.865
Der ist total nett, ja.

01:05:57.085 --> 01:05:58.625
Sometimes pronounced Jot,

01:05:58.685 --> 01:06:00.945
sagt Wikipedia. Sometimes pronounced.

01:06:01.645 --> 01:06:02.225
Sometimes.

01:06:02.305 --> 01:06:04.485
Ich versuche es dann mal jedes dritte Mal zu machen.

01:06:07.485 --> 01:06:08.985
Genau, der sagt halt...

01:06:08.985 --> 01:06:38.965
und Jochen unterhalten sich über die Programmiersprache Python

01:06:38.985 --> 01:06:41.685
Aber auch nicht so arg, ganz ehrlich.

01:06:41.945 --> 01:06:44.285
Ja, aber wenn man doch,

01:06:44.625 --> 01:06:45.645
also ja, wenn man

01:06:45.645 --> 01:06:47.565
irgendwie kann, das was man in Python

01:06:47.565 --> 01:06:49.605
macht, kann die Dot-Bibliothek nicht einfach sagen,

01:06:49.985 --> 01:06:51.525
nee, ich bin nicht downgradebar, also ist das

01:06:51.525 --> 01:06:53.125
nicht da schon mit drin, also das muss ja dann,

01:06:54.325 --> 01:06:55.585
der Standard kann das vielleicht,

01:06:55.685 --> 01:06:57.565
aber wenn jetzt meine Bibliothek das verbietet,

01:06:57.645 --> 01:06:59.645
dann ist das... Das Problem ist, du weißt ja nicht, mit welchen Clients du redest.

01:07:00.105 --> 01:07:01.605
Ja, aber wenn der Client das gar nicht sagen kann,

01:07:01.645 --> 01:07:03.505
weil meine Bibliothek das gar nicht zulässt, dann...

01:07:03.505 --> 01:07:04.645
Ja, dann bist du inkompatibel.

01:07:05.125 --> 01:07:07.565
Dann sagen die Clients, mit der Api

01:07:07.565 --> 01:07:08.505
kann ich nicht reden, kaputt.

01:07:08.985 --> 01:07:10.225
Ja, gut, kann ja sein.

01:07:11.005 --> 01:07:12.605
Aber den kleinen, den kann ich ja quasi selber sagen.

01:07:13.425 --> 01:07:14.365
Kannst du machen, Dominik.

01:07:14.505 --> 01:07:15.005
Kannst du machen.

01:07:15.525 --> 01:07:19.425
Dann kann man dabei bleiben, dann muss man nicht sagen, oh nein.

01:07:20.645 --> 01:07:25.505
Ja, aber wenn ich den kleinen selber ausliefer, also das JavaScript beispielsweise, was dann mit meinem Backend reden soll,

01:07:25.865 --> 01:07:29.965
und ich selber bestimmen kann, was da drin steht, dann kann doch nicht einfach irgendwer sagen, dass er jetzt einen anderen Standard dafür nehmen will.

01:07:30.425 --> 01:07:34.465
Dann kannst du aber auch die Session-Authentifizierung nehmen, weil da hast du ja nicht viel gewonnen.

01:07:34.465 --> 01:07:38.365
Außer, dass du jetzt selber immer die Authentifizierung

01:07:38.365 --> 01:07:40.065
in jeden Request reintun musst, weil der Browser

01:07:40.065 --> 01:07:40.985
das nicht automatisch macht.

01:07:41.005 --> 01:07:44.265
Ja, aber bei Session habe ich ja noch andere Probleme, glaube ich.

01:07:46.265 --> 01:07:46.585
Ja.

01:07:47.625 --> 01:07:47.945
Ja.

01:07:48.765 --> 01:07:50.365
Dann kann ja jemand so tun, dass wer ja meine Session

01:07:50.365 --> 01:07:52.765
klauen will oder sowas und dann...

01:07:52.765 --> 01:07:53.485
Ja, kann er machen.

01:07:54.345 --> 01:07:55.805
Das verhindert der Browser.

01:07:57.205 --> 01:07:58.005
Ja, aber egal.

01:07:59.225 --> 01:08:00.425
Es ist kompliziert.

01:08:00.525 --> 01:08:02.605
Das mit der Authentifizierung ist auch noch nicht so richtig abschließend.

01:08:02.605 --> 01:08:10.885
Ich bin überrascht, ich habe mich da schon ein paar Mal Gedanken gemacht und ich war immer überrascht, dass es da keine eigene fertige Antwort gibt.

01:08:10.885 --> 01:08:11.845
Die wenig gelöst ist.

01:08:12.045 --> 01:08:20.425
Sondern dass man immer denkt, oh, ich habe die Antwort gefunden und dann irgendwie ein paar Monate, Jahre später kommt einer um die Ecke und sagt, was machst du denn da, das ist doch totaler Quatsch.

01:08:21.465 --> 01:08:24.525
Und das passt man einem schon seit Jahren nicht mehr, seit Jahren machen wir das nicht mehr.

01:08:25.285 --> 01:08:31.205
Genau, und dann denkt man sich immer so, oh, okay, ich glaube, ich brauche Hilfe.

01:08:31.205 --> 01:08:33.205
Ja, okay, ja, okay, Authentifizierung

01:08:33.205 --> 01:08:33.805
über REST.

01:08:33.805 --> 01:08:34.785
Es ist erstaunlich ungelöst.

01:08:36.925 --> 01:08:39.245
Ja, REST ist ja erst mal

01:08:39.245 --> 01:08:41.025
nur eine ganz normale HTTP-Webseite.

01:08:41.165 --> 01:08:43.265
Also du kannst Authentifizierung machen mit allen Mechanismen,

01:08:43.345 --> 01:08:44.805
die du da hast.

01:08:45.065 --> 01:08:46.465
Ich meine, wir haben auch

01:08:46.465 --> 01:08:48.245
früher alle die Webseiten gesehen,

01:08:48.245 --> 01:08:50.205
die die PHP-Session-It

01:08:50.205 --> 01:08:52.525
als

01:08:52.525 --> 01:08:53.605
Get-Parameter drin hatten.

01:08:57.005 --> 01:08:58.345
Du durftest mal halt nicht kopieren.

01:08:58.345 --> 01:09:01.545
Dann dürfen wir halt die Links nicht verschicken

01:09:01.545 --> 01:09:02.565
Ja

01:09:02.565 --> 01:09:05.745
Wie macht man denn sonst noch

01:09:05.745 --> 01:09:07.545
REST-APIs mit Python?

01:09:07.665 --> 01:09:08.765
Genau, also ja

01:09:08.765 --> 01:09:11.885
General REST-Fanwork, schöne Sache

01:09:11.885 --> 01:09:14.165
Ich glaube in der

01:09:14.165 --> 01:09:16.045
Flask, ich weiß gar nicht mehr

01:09:16.045 --> 01:09:17.845
wie man das ausspricht, vielleicht spricht man das auch J aus

01:09:17.845 --> 01:09:19.685
Nein, Flask

01:09:19.685 --> 01:09:21.125
Ich weiß es nicht genau

01:09:21.125 --> 01:09:23.025
Flask-K

01:09:23.025 --> 01:09:24.285
Flask-K

01:09:24.285 --> 01:09:26.925
Jason

01:09:26.925 --> 01:09:39.425
Genau, da verwendet man eher Marshmallow, das gibt es auch für Django, aber da verwendet man meistens Django REST Framework

01:09:39.425 --> 01:09:42.205
Ist so ähnlich

01:09:42.205 --> 01:09:43.225
Was ist das jetzt wieder, Marshmallow?

01:09:43.565 --> 01:09:47.185
Das ist auch eine Bibliothek, so ähnlich wie Django REST Framework, aber im Grunde, ja

01:09:47.185 --> 01:09:47.945
Endpunkte

01:09:47.945 --> 01:09:49.545
Benutzt man ja noch Flask, Jochen

01:09:49.545 --> 01:09:52.125
Ja, aber genau, da wäre Hot Take

01:09:52.125 --> 01:09:54.465
Ich würde dir sagen

01:09:54.465 --> 01:09:57.185
So, jetzt habe ich ja

01:09:57.185 --> 01:09:58.205
was ganz gemeines.

01:09:59.065 --> 01:10:01.585
Jetzt machst du die Tore

01:10:01.585 --> 01:10:02.225
für Flameworks.

01:10:03.225 --> 01:10:05.125
Der einzige Grund,

01:10:05.445 --> 01:10:07.085
Flask noch zu verwenden, ist ja so im Grunde,

01:10:07.185 --> 01:10:09.385
aus meiner Perspektive, ich kenne mich auch nicht wirklich mit Flask aus,

01:10:09.585 --> 01:10:11.605
aber wenn man alte Python-Versionen

01:10:11.605 --> 01:10:12.165
hat, weil

01:10:12.165 --> 01:10:15.505
das geht mit Flask und vielleicht mit anderen Sachen nicht.

01:10:16.325 --> 01:10:17.245
Aber wenn man jetzt

01:10:17.245 --> 01:10:19.365
größer Python 3.6 unterwegs ist,

01:10:19.565 --> 01:10:21.625
warum Flask? Warum nimmt man dann nicht sowas wie Flask-API?

01:10:22.705 --> 01:10:23.145
Also

01:10:23.145 --> 01:10:23.885
Meinungen.

01:10:23.885 --> 01:10:25.365
Wenn ich nicht nur eine API schreiben werde.

01:10:25.445 --> 01:10:27.225
Hallo at pythonpodcast.de.

01:10:27.325 --> 01:10:29.005
Da könnt ihr gerne Kommentare und

01:10:29.005 --> 01:10:30.805
Afterlame an Jochen und

01:10:30.805 --> 01:10:33.545
Kommentare jederzeit erwünscht hinterlassen.

01:10:33.805 --> 01:10:35.465
Machen wir mal so eine Episode, wo wir die

01:10:35.465 --> 01:10:36.305
vorlesen einfach.

01:10:36.925 --> 01:10:39.485
Ja, das Problem ist, die ist dann

01:10:39.485 --> 01:10:40.505
aber keine zwei Stunden lang.

01:10:42.325 --> 01:10:43.725
Ja, außerdem wollen wir ja nicht

01:10:43.725 --> 01:10:45.605
ja, es sind ja immer viele

01:10:45.605 --> 01:10:46.345
nette Nachrichten da.

01:10:46.785 --> 01:10:49.545
Es gibt ein sehr schönes Buch von einem

01:10:49.545 --> 01:10:50.985
Science-Fiction-Autor, das heißt

01:10:50.985 --> 01:10:52.725
Your Hate Mail Will Be Graded.

01:10:53.145 --> 01:10:55.365
wo er einfach

01:10:55.365 --> 01:10:57.345
Fanpost

01:10:57.345 --> 01:10:58.565
sagen wir es mal in Anführungszeichen

01:10:58.565 --> 01:11:00.585
die an ihn geschickt wurde

01:11:00.585 --> 01:11:03.045
diskutiert

01:11:03.045 --> 01:11:06.685
und

01:11:06.685 --> 01:11:07.925
sowas

01:11:07.925 --> 01:11:10.005
Jochen du wirst jetzt sicherlich

01:11:10.005 --> 01:11:11.465
jetzt wurde es gesagt

01:11:11.465 --> 01:11:14.985
das umfasst ja auch alle anderen

01:11:14.985 --> 01:11:15.765
alternativen

01:11:15.765 --> 01:11:19.145
alle anderen alternativen Systeme

01:11:19.885 --> 01:11:20.685
CherryPie

01:11:20.685 --> 01:11:21.625
Pyramid

01:11:21.625 --> 01:11:24.605
Repose, Soap

01:11:24.605 --> 01:11:26.625
Es gab ja eine neue Version

01:11:26.625 --> 01:11:28.045
Pyramid 2.0, voll gut

01:11:28.045 --> 01:11:30.305
Ich weiß es ehrlich gesagt gar nicht so genau, was

01:11:30.305 --> 01:11:32.345
Pyramid, ich weiß, die gibt es alle

01:11:32.345 --> 01:11:32.765
und so

01:11:32.765 --> 01:11:35.765
Manche davon können bestimmt auch voll coole Sachen

01:11:35.765 --> 01:11:36.925
Bei Soap, ja

01:11:36.925 --> 01:11:40.305
Ja, das war mal

01:11:40.305 --> 01:11:41.445
voll groß und so, aber

01:11:41.445 --> 01:11:43.685
ja, vielleicht ist es auch voll cool

01:11:43.685 --> 01:11:45.845
Es gibt noch Bottle oder sowas, ist das nicht auch?

01:11:45.845 --> 01:11:47.925
Aber das ist super, ja, Bottle gibt es

01:11:47.925 --> 01:11:49.265
ist super klein

01:11:49.265 --> 01:11:54.145
Ja, das ist kleiner als Flask, deshalb heißt es ja so

01:11:54.145 --> 01:11:57.645
Aber ich meine

01:11:57.645 --> 01:12:00.165
tatsächlich Fast API würde ich jetzt aus meiner Perspektive

01:12:00.165 --> 01:12:02.325
es macht im Grunde, dass es Fast macht, mehr oder weniger

01:12:02.325 --> 01:12:04.765
Hat auch im Vergleich zu Flask

01:12:04.765 --> 01:12:06.685
mehr Stars bei GitHub, auf jeden Fall als Bottle

01:12:06.685 --> 01:12:07.345
Na super

01:12:07.345 --> 01:12:10.125
Ja, aber das ist doch

01:12:10.125 --> 01:12:12.825
Fast API ist doch wirklich nur für APIs gedacht, oder?

01:12:13.325 --> 01:12:14.005
Ne, du kannst

01:12:14.005 --> 01:12:15.485
du kannst

01:12:15.485 --> 01:12:18.005
ja, ist gedacht, aber

01:12:18.005 --> 01:12:19.965
es geht auch anders, du kannst da einfach

01:12:19.965 --> 01:12:21.825
Ginger 2 Templates verwenden

01:12:21.825 --> 01:12:24.025
und die Dinger ausliefern, gar kein Problem, geht

01:12:24.025 --> 01:12:25.885
und

01:12:25.885 --> 01:12:27.265
genau, du musst halt alles

01:12:27.265 --> 01:12:29.785
Starlet ist halt sozusagen das

01:12:29.785 --> 01:12:31.745
Ding da drunter

01:12:31.745 --> 01:12:34.105
die Werbung ist on par

01:12:34.105 --> 01:12:35.345
with Node.js and Go

01:12:35.345 --> 01:12:36.525
ja

01:12:36.525 --> 01:12:40.085
das besprechen wir

01:12:40.085 --> 01:12:40.605
in der Benchmark

01:12:40.605 --> 01:12:44.005
war das für

01:12:44.005 --> 01:12:45.425
einen Benchmark der legal war?

01:12:45.425 --> 01:12:45.765
ja, okay

01:12:45.765 --> 01:12:49.685
Aber du hast halt, also ja, ich meine, ich mache in letzter Zeit schon auch so Dinge mit

01:12:49.685 --> 01:12:53.805
FastAPI und ich finde das super. Ich finde gerade

01:12:53.805 --> 01:12:58.005
auch die Integration mit Pydentic echt

01:12:58.005 --> 01:13:02.185
nett und gut für

01:13:02.185 --> 01:13:05.465
Alle Leute, die sich damit nicht abfinden wollen, können auch bitte an

01:13:05.465 --> 01:13:08.485
welche E-Mail-Adresse schreiben.

01:13:08.485 --> 01:13:09.805
Hallo, at Python Podcast.

01:13:10.985 --> 01:13:12.285
Def 0 at Python.

01:13:12.285 --> 01:13:12.525
mal.

01:13:16.465 --> 01:13:18.405
Aber ich finde die Syntax ist halt

01:13:18.405 --> 01:13:19.945
besser. Du hast halt da, das ist halt

01:13:19.945 --> 01:13:21.965
nativ Async, direkt alles.

01:13:23.245 --> 01:13:24.205
Die ganzen Geschichten

01:13:24.205 --> 01:13:25.265
sind halt,

01:13:26.525 --> 01:13:28.305
du könntest ja auch quasi in Django

01:13:28.305 --> 01:13:30.325
oder halt in den Serializern Sachen mit

01:13:30.325 --> 01:13:32.345
Type-Annotationen halt sozusagen da

01:13:32.345 --> 01:13:33.805
die Typen festlegen oder so.

01:13:34.385 --> 01:13:36.105
Geht nur nicht, weil das ist halt älter als

01:13:36.105 --> 01:13:38.405
Type-Annotationen, deswegen musste man sich da schon was anderes überlegen.

01:13:38.665 --> 01:13:39.645
In Django mit den Descriptoren.

01:13:41.285 --> 01:13:41.685
Aber

01:13:41.685 --> 01:13:44.025
in FastAPI ist halt erst ab Python 3.6,

01:13:44.085 --> 01:13:46.205
das heißt, da kann man das halt so machen und dann hat man halt

01:13:46.205 --> 01:13:48.305
das in relativ

01:13:48.305 --> 01:13:50.065
eleganter Syntax ausgedrückt, wo man sonst

01:13:50.065 --> 01:13:51.145
eine Menge schreiben muss.

01:13:52.765 --> 01:13:54.065
Ob es jetzt so schlimm ist, weiß ich auch nicht,

01:13:54.105 --> 01:13:55.805
aber es ist auf jeden Fall irgendwie so ein bisschen erfrischend

01:13:55.805 --> 01:13:57.965
und was man halt auch geschenkt kriegt ist,

01:13:58.805 --> 01:13:59.825
naja, das sind wir auch schon

01:13:59.825 --> 01:14:01.085
eher beim Restthema,

01:14:01.765 --> 01:14:03.865
ein Frontend, das aber nicht

01:14:03.865 --> 01:14:06.265
so wie bei Django REST Framework so ein eingebautes

01:14:06.265 --> 01:14:07.665
gerendertes Ding ist, sondern

01:14:07.665 --> 01:14:08.925
das ist halt sozusagen

01:14:08.925 --> 01:14:11.585
Swagger oder halt Open API

01:14:11.585 --> 01:14:12.485
heißt das jetzt irgendwie,

01:14:14.065 --> 01:14:14.145
dass

01:14:14.145 --> 01:14:17.025
sich aus dem Schema

01:14:17.025 --> 01:14:19.265
quasi das Frontend generiert. Es ist ja quasi

01:14:19.265 --> 01:14:21.505
komplett JavaScript, aber dem sagt man

01:14:21.505 --> 01:14:23.305
halt hier, so ist das Schema, dann macht es halt

01:14:23.305 --> 01:14:25.465
ein Frontend dazu, das tatsächlich auch so ähnlich ist

01:14:25.465 --> 01:14:26.725
wie jetzt bei

01:14:26.725 --> 01:14:28.225
Jungle REST Framework.

01:14:29.705 --> 01:14:31.105
Und das sieht eigentlich sehr gut aus.

01:14:31.125 --> 01:14:33.585
Ja, sieht echt gut aus. Und das ist übrigens auch von Sebastian Ramirez,

01:14:33.885 --> 01:14:35.145
der auch Typer gemacht hat.

01:14:35.265 --> 01:14:37.145
Den hatten wir auch schon mal kurz ein, zwei Mal erwähnt.

01:14:37.225 --> 01:14:38.205
Das sind schon interessante Sachen.

01:14:38.925 --> 01:14:41.045
Da gab es doch noch was von dem einen, der

01:14:41.045 --> 01:14:43.625
Jagerest Framework gemacht hat, wie hieß das denn gleich noch?

01:14:44.125 --> 01:14:45.365
Ja, das ist ja

01:14:45.365 --> 01:14:47.285
Tom, na,

01:14:47.365 --> 01:14:47.765
wie heißt er noch?

01:14:48.945 --> 01:14:50.065
Tom Christie, genau

01:14:50.065 --> 01:14:53.385
Der hat auch

01:14:53.385 --> 01:14:54.425
Starlet gemacht

01:14:54.425 --> 01:14:56.685
Ah, ist das Starlet?

01:14:57.305 --> 01:14:59.205
Wie hieß dieses, das hieß

01:14:59.205 --> 01:15:00.545
Star API oder irgendwie sowas?

01:15:00.925 --> 01:15:01.985
Fast API, meinst du?

01:15:02.785 --> 01:15:05.565
Nee, dieser Standard, den er da sich ausgedacht hat

01:15:05.565 --> 01:15:06.425
Ach, ich weiß es nicht mehr

01:15:06.425 --> 01:15:09.545
Ach ja, das gab es auch. Er hat auch ein API-Ding gemacht.

01:15:10.325 --> 01:15:11.265
Jaja, aber

01:15:11.265 --> 01:15:12.625
ja, ob das...

01:15:12.625 --> 01:15:13.945
Das war nur sehr kurzlebig, oder?

01:15:14.565 --> 01:15:16.745
Ja, also jedenfalls habe ich davon dann irgendwann nichts mehr gehört.

01:15:16.825 --> 01:15:18.445
Es waren auch coole Ideen dabei.

01:15:18.545 --> 01:15:20.605
Da war zum Beispiel sowas dabei, wie dass du dann auch gleich

01:15:20.605 --> 01:15:22.305
Kommando-Zahlen-Interface kriegst und so.

01:15:23.105 --> 01:15:24.165
Aber irgendwie...

01:15:24.165 --> 01:15:25.105
Was ist denn jetzt da?

01:15:25.105 --> 01:15:26.565
Das wäre auch schon wieder

01:15:26.565 --> 01:15:28.065
Superschwung.

01:15:28.145 --> 01:15:30.445
Das ist das, was Fast-API drunter

01:15:30.445 --> 01:15:31.745
verwendet.

01:15:32.545 --> 01:15:34.205
Das ist quasi von einem Delphi-Entwickler, der

01:15:34.205 --> 01:15:36.245
Dango S-Film gemacht hat und das hat dann

01:15:36.245 --> 01:15:37.385
Fast API-Benutzung.

01:15:39.385 --> 01:15:39.865
Cool.

01:15:40.005 --> 01:15:42.065
Also Tom Christie macht eine Menge coole Sachen.

01:15:43.025 --> 01:15:43.405
Der hat

01:15:43.405 --> 01:15:45.765
einen Nachfolger von

01:15:45.765 --> 01:15:47.565
Request Bibliothek.

01:15:48.865 --> 01:15:49.385
HTTPX.

01:15:49.865 --> 01:15:51.705
Genau, hat so ein bisschen ein Problem.

01:15:51.985 --> 01:15:53.585
Und zwar einmal ist sie so

01:15:53.585 --> 01:15:55.465
slightly unmaintained.

01:15:56.805 --> 01:15:57.325
Und

01:15:57.325 --> 01:15:59.745
sie ist auch nicht async.

01:16:00.205 --> 01:16:01.245
Und zwar auch so gar nicht.

01:16:02.585 --> 01:16:04.025
Und das ist ja heutzutage

01:16:04.025 --> 01:16:06.085
auch so ein bisschen doof, weil wenn schon

01:16:06.085 --> 01:16:07.765
alles an Sync wird, dann will man vielleicht auch so

01:16:07.765 --> 01:16:09.165
Async-HTTP-Requests machen.

01:16:09.765 --> 01:16:10.905
Das geht halt mit Requests nicht.

01:16:11.945 --> 01:16:14.085
Oder es geht schon, aber da muss man halt

01:16:14.085 --> 01:16:16.165
irgendwie sehr unheilige

01:16:16.165 --> 01:16:17.985
Dinge tun und irgendwie das in Threads

01:16:17.985 --> 01:16:18.545
machen und so.

01:16:19.825 --> 01:16:21.825
Das geht halt nicht mit Async-Io oder so, so einfach.

01:16:23.005 --> 01:16:24.065
Ja, und HTTPS

01:16:24.065 --> 01:16:26.025
ist aber dann Async-fähig

01:16:26.025 --> 01:16:27.065
und hat halt quasi

01:16:27.065 --> 01:16:29.465
fast die gleiche API wie

01:16:29.465 --> 01:16:31.965
Requests. Also bemüht sich auch

01:16:31.965 --> 01:16:33.965
quasi die gleiche API zu haben.

01:16:34.025 --> 01:16:35.465
sodass man das halt einfach quasi

01:16:35.465 --> 01:16:38.825
man kann es so verwenden, wie man es gewohnt ist.

01:16:38.905 --> 01:16:39.465
Man verwendet einfach

01:16:39.465 --> 01:16:41.685
HTTPX anstelle von Requests.

01:16:44.145 --> 01:16:45.825
Auch sein Nennt. Aber tatsächlich

01:16:45.825 --> 01:16:47.925
irgendwie ein bisschen langsam

01:16:47.925 --> 01:16:49.345
manchmal, ich weiß nicht so genau.

01:16:50.605 --> 01:16:51.805
Ich verwechsel es immer mit

01:16:51.805 --> 01:16:53.045
HTMX.

01:16:54.845 --> 01:16:56.245
Das ist eine JavaScript-Bibliothek,

01:16:56.245 --> 01:16:57.865
die Elemente

01:16:57.865 --> 01:16:59.145
interaktiv macht.

01:17:00.045 --> 01:17:01.045
Kann man sich auch mal ansehen.

01:17:01.585 --> 01:17:03.785
Aber ich verwechsel es immer.

01:17:04.025 --> 01:17:08.185
Ja, genau, also ja

01:17:08.185 --> 01:17:10.485
das sind so, ich weiß nicht

01:17:10.485 --> 01:17:12.005
ob ihr jetzt noch, also das ist eben Marshmallow,

01:17:12.185 --> 01:17:12.905
Django REST Framework,

01:17:14.005 --> 01:17:15.045
FastAPI mit

01:17:15.045 --> 01:17:18.045
Saga Pydantic, also man kann dieses Saga Interface auch bei

01:17:18.045 --> 01:17:20.145
anderen APIs, man kann das auch mit Django REST Framework verwenden

01:17:20.145 --> 01:17:20.965
das machen ja auch viele

01:17:20.965 --> 01:17:23.505
bei Marshmallow geht das bestimmt auch

01:17:23.505 --> 01:17:25.125
ich weiß nicht, gibt es da sonst noch Dinge?

01:17:25.125 --> 01:17:27.985
Ja, das ist doch das, was jetzt OpenAI, also dieses OpenAI API

01:17:27.985 --> 01:17:28.785
Ja, ja, genau

01:17:28.785 --> 01:17:30.325
Ja

01:17:30.325 --> 01:17:33.785
Das ist da verlinkt

01:17:33.785 --> 01:17:36.025
Ja, aber jetzt um sozusagen

01:17:36.025 --> 01:17:37.765
mal noch einen Schritt weiter zu gehen, Jochen, du hast es ja schon

01:17:37.765 --> 01:17:39.645
angekündigt oder angedeutet,

01:17:39.745 --> 01:17:41.805
wenn ich jetzt eben nicht mehr so ein Interface

01:17:41.805 --> 01:17:44.005
habe, was gut auf diese

01:17:44.005 --> 01:17:45.905
Einzelobjekte passt

01:17:45.905 --> 01:17:47.785
ums jetzt mal sozusagen, sondern wenn ich mehr Kontrolle

01:17:47.785 --> 01:17:48.445
darüber brauche,

01:17:49.465 --> 01:17:51.745
was ich genau abrufe und welche

01:17:51.745 --> 01:17:53.485
Attribute ich abrufe, wie könnte ich das denn

01:17:53.485 --> 01:17:55.785
machen? Ja, genau, da

01:17:55.785 --> 01:17:57.105
kann man dann natürlich sowas nehmen wie

01:17:57.105 --> 01:17:58.525
GraphQL.

01:18:01.305 --> 01:18:01.825
Das ist

01:18:01.825 --> 01:18:03.125
von Facebook, oder? Das ist Facebook,

01:18:03.125 --> 01:18:04.885
entwickelt,

01:18:05.365 --> 01:18:07.565
im Wesentlichen, um genau diesen

01:18:07.565 --> 01:18:09.445
Use Case

01:18:09.445 --> 01:18:11.365
abzudecken, dass man eben Sachen aus

01:18:11.365 --> 01:18:13.405
diesem Social Graph abrufen kann,

01:18:13.685 --> 01:18:15.165
der sich nicht an die

01:18:15.165 --> 01:18:16.605
Standard-Objektkonventionen hält.

01:18:16.765 --> 01:18:19.265
Ja, sie haben halt im Grunde genau das Problem, dass sie halt

01:18:19.265 --> 01:18:21.025
sehr viele unterschiedliche,

01:18:21.145 --> 01:18:22.885
in sehr vielen unterschiedlichen Kontexten halt diese

01:18:22.885 --> 01:18:25.445
Daten, so Graph-förmige Daten,

01:18:25.605 --> 01:18:26.205
ja auch gerade, ich meine,

01:18:27.165 --> 01:18:29.305
da passt halt auch normales SQL, man kann ja sonst

01:18:29.305 --> 01:18:30.745
auch normales SQL nehmen,

01:18:31.265 --> 01:18:31.605
ist auch

01:18:31.605 --> 01:18:34.865
aber da passt das halt gar nicht so super drauf

01:18:34.865 --> 01:18:36.965
und dann GraphQL passt da besser

01:18:36.965 --> 01:18:39.465
und ja, gut, okay

01:18:39.465 --> 01:18:39.905
ist auch wieder

01:18:39.905 --> 01:18:42.925
Ja, ist ja immer bei SQL, ist ja immer Sicherheit

01:18:42.925 --> 01:18:44.285
Wir haben das gelacht, ihr habt das kurz drüber gesehen

01:18:44.285 --> 01:18:46.485
Was war jetzt gerade der Joke dahinter?

01:18:47.165 --> 01:18:49.145
Da war ein bisschen tieferer Joke hinter der

01:18:49.145 --> 01:18:51.665
Jeder Softwareentwickler

01:18:51.665 --> 01:18:52.825
hat sich schon mal gedacht, wisst ihr was

01:18:52.825 --> 01:18:55.325
ich mache meine Schnittstelle einfach so, dass ich SQL-Strings

01:18:55.325 --> 01:18:56.925
hinschicke und dann das Ergebnis zurückschicke

01:18:56.925 --> 01:18:59.365
und das ist super genial, weil das ist für die Entwickler

01:18:59.365 --> 01:19:01.005
genau das, was die Entwickler haben wollen

01:19:01.005 --> 01:19:03.585
nur hast du damit halt

01:19:03.585 --> 01:19:04.905
Sicherheit kannst du vergessen

01:19:04.905 --> 01:19:06.945
hast keine Sicherheitsabfragen

01:19:06.945 --> 01:19:08.665
mit SQL kannst du alles machen

01:19:08.665 --> 01:19:10.865
und

01:19:10.865 --> 01:19:13.585
deshalb macht man das

01:19:13.585 --> 01:19:15.405
dann doch nicht, sondern denkt sich eben so

01:19:15.405 --> 01:19:17.405
Sprachen aus, wie zum Beispiel REST oder GraphQL

01:19:17.405 --> 01:19:19.525
Ja genau

01:19:19.525 --> 01:19:21.445
ich weiß gar nicht, ob die EdgeDB Leute

01:19:21.445 --> 01:19:23.485
noch eine eigene Sprache da haben

01:19:23.485 --> 01:19:24.825
oder ob die auch GraphQL

01:19:24.825 --> 01:19:26.185
Was ist EdgeDB?

01:19:27.885 --> 01:19:29.625
Das sind eigentlich im Grunde

01:19:29.625 --> 01:19:30.725
die Leute hinter Python

01:19:30.725 --> 01:19:33.465
hinter der ganzen

01:19:33.465 --> 01:19:34.785
Python Async-Geschichte

01:19:34.785 --> 01:19:37.245
hinter Async.io und so

01:19:37.245 --> 01:19:39.745
die machen

01:19:39.745 --> 01:19:41.245
ein Ding namens

01:19:41.245 --> 01:19:42.125
HDB und

01:19:42.125 --> 01:19:45.585
ja, es ist

01:19:45.585 --> 01:19:47.405
auch alles Async und so und

01:19:47.405 --> 01:19:49.445
eigentlich ziemlich cool, basiert auf Postgres

01:19:49.445 --> 01:19:50.405
auch, aber

01:19:50.405 --> 01:19:53.345
ich glaube, die hatten auch eine eigene Abfragesprache

01:19:53.345 --> 01:19:55.525
also ich dachte nur so, dass

01:19:55.525 --> 01:19:57.405
es vielleicht eventuell eine Konkurrenz zu GraphQL

01:19:57.405 --> 01:19:58.265
oder so, ich weiß nicht genau

01:19:58.265 --> 01:19:59.065
vielleicht auch nicht.

01:19:59.865 --> 01:20:02.345
Vielleicht nochmal ganz kurz zu dem Unterschied, also was REST jetzt macht

01:20:02.345 --> 01:20:03.965
ist Objekte und damit kann man wunderbar

01:20:03.965 --> 01:20:05.565
Quad machen und das eignet sich super für

01:20:05.565 --> 01:20:07.105
normales SQL.

01:20:08.045 --> 01:20:09.765
Und GraphQL, nein,

01:20:10.285 --> 01:20:12.045
falsch. Ne, da gibt es sowas gar nicht.

01:20:12.305 --> 01:20:13.065
Du kannst bei

01:20:13.065 --> 01:20:16.205
REST kannst du halt nicht sagen, was

01:20:16.205 --> 01:20:17.425
du gerne hättest oder du kriegst halt.

01:20:18.145 --> 01:20:20.065
Genau, es sind immer einzelne Objekte und

01:20:20.065 --> 01:20:20.925
immer ganze Objekte.

01:20:21.805 --> 01:20:23.405
Oder Listen von Objekten oder sowas.

01:20:24.125 --> 01:20:26.505
Ja gut, du kannst halt unterschiedliche

01:20:26.505 --> 01:20:28.245
URLs machen, die dann unterschiedliche Sachen liefern, aber

01:20:28.245 --> 01:20:30.225
du kannst halt jetzt nicht

01:20:30.225 --> 01:20:32.145
das wäre halt nicht restkomfortabel

01:20:32.145 --> 01:20:34.885
eigentlich, genau, hat jedes

01:20:34.885 --> 01:20:36.865
Objekt Invest seine eigene URL

01:20:36.865 --> 01:20:38.725
und das höchste der Gefühle ist, dass

01:20:38.725 --> 01:20:40.685
du halt Listen haben kannst, die bestimmte

01:20:40.685 --> 01:20:42.425
Eigenschaften haben, zum Beispiel entweder alle

01:20:42.425 --> 01:20:44.645
oder die, die

01:20:44.645 --> 01:20:45.865
in X verlinkt sind

01:20:45.865 --> 01:20:48.625
dass du so Sublisten hast

01:20:48.625 --> 01:20:50.605
dann kannst du natürlich noch Filter machen

01:20:50.605 --> 01:20:52.565
aber das geht dann schon raus, weil dann

01:20:52.565 --> 01:20:54.485
hast du schon so Listen

01:20:54.485 --> 01:20:56.945
abgerufen, die es

01:20:56.945 --> 01:20:58.445
eigentlich gar nicht gibt und das ist schon so.

01:20:59.285 --> 01:21:00.045
Gar nicht REST.

01:21:01.045 --> 01:21:02.985
Eigentlich soll das nicht so sein.

01:21:03.005 --> 01:21:04.745
Also ich sollte alle Abfragen einzeln machen, um zu gucken,

01:21:04.905 --> 01:21:06.725
ob die hier drin sind und dann alle wieder wegschmeißen,

01:21:06.785 --> 01:21:07.125
die es nicht sind.

01:21:07.985 --> 01:21:08.805
Nee, das nicht, aber

01:21:08.805 --> 01:21:13.025
diese Liste selber ist nicht,

01:21:13.705 --> 01:21:14.945
die wird nicht von REST beschrieben,

01:21:15.125 --> 01:21:16.905
weil diese Liste selber kein

01:21:16.905 --> 01:21:17.765
Objekt ist. Das heißt,

01:21:18.705 --> 01:21:20.905
um diese Liste zu finden,

01:21:21.245 --> 01:21:22.965
musst du schon wieder mehr wissen, als

01:21:22.965 --> 01:21:24.425
in Hatoas drin ist.

01:21:24.945 --> 01:21:26.745
Weil die nirgendwo verlinkt sein kann.

01:21:26.945 --> 01:21:29.645
Jetzt musst du nochmal kurz erklären, was Hr ist. Das hat nämlich eben niemand verstanden.

01:21:29.905 --> 01:21:33.605
Das sind diese Hypertext, also dass alles über einen Hyperlink erreichbar ist.

01:21:34.325 --> 01:21:37.025
Deswegen nennt man auch Hyper-Synergizer beim Dango REST Framework.

01:21:38.025 --> 01:21:39.405
Hyperlink-Synergizer, genau.

01:21:39.405 --> 01:21:43.245
Genau, damit die Links alle korrekt drin sind, damit du draufklicken kannst.

01:21:43.665 --> 01:21:50.945
Das ist eigentlich einer der Grundsätze, dass du sozusagen den AP-Root anklickst und da steht dann drin, was es alles gibt und dann klickst du da drauf.

01:21:51.585 --> 01:21:56.345
Und da steht dann drin, hier gibt es die Objekte vom Typ so und so und dann klickst du da drauf und dann kommt ein Objekt vom Typ so und so.

01:21:56.945 --> 01:21:59.025
dass alles was es gibt

01:21:59.025 --> 01:22:00.565
über einen Hyperlink erreichbar ist

01:22:00.565 --> 01:22:02.705
und wenn du jetzt so Get-Parameter einführst

01:22:02.705 --> 01:22:03.925
die Filter haben oder so

01:22:03.925 --> 01:22:07.785
dann sind die nirgendwo verlinkt

01:22:07.785 --> 01:22:08.705
die musst du kennen

01:22:08.705 --> 01:22:11.025
und das ist schlecht

01:22:11.025 --> 01:22:12.905
weil dann ist deine

01:22:12.905 --> 01:22:14.585
API nicht mehr durchsichtig

01:22:14.585 --> 01:22:16.105
sondern die ist jetzt

01:22:16.105 --> 01:22:17.945
undurchsichtig geworden

01:22:17.945 --> 01:22:20.525
du findest das nicht in der API

01:22:20.525 --> 01:22:22.245
vielleicht über Options

01:22:22.245 --> 01:22:24.505
kann man sowas in die Options schreiben

01:22:24.505 --> 01:22:26.385
in den

01:22:26.385 --> 01:22:28.025
in den Options

01:22:28.025 --> 01:22:29.925
kriegst du eigentlich die Header zurück.

01:22:30.265 --> 01:22:32.405
Da kriegst du eigentlich die Header zurück und dann müsstest du dir

01:22:32.405 --> 01:22:33.465
wieder irgendwelche

01:22:33.465 --> 01:22:36.185
Header überlegen, die auch nicht

01:22:36.185 --> 01:22:37.145
standardkonform sind,

01:22:37.425 --> 01:22:39.825
von denen du auch wissen musst,

01:22:39.825 --> 01:22:41.925
dass du quasi die Header gucken musst,

01:22:41.985 --> 01:22:42.445
um das zu finden.

01:22:43.285 --> 01:22:45.165
Das, was Django Rest Framework da macht,

01:22:45.965 --> 01:22:47.645
ist ja schon eine sehr gute Sache,

01:22:47.765 --> 01:22:49.685
dass du die Dokumentation mitlieferst, kannst

01:22:49.685 --> 01:22:50.945
dir die Dokumentation anschreiben.

01:22:52.525 --> 01:22:53.505
In einem Swagger-File

01:22:53.505 --> 01:22:55.385
weiß ich gar nicht, wie das abgebildet werden würde.

01:22:55.385 --> 01:23:25.365
und Jochen unterhalten sich über die Programmiersprache Python

01:23:25.385 --> 01:23:41.127
und Grafiel ist jetzt wieder so ein kleines bisschen ein Schritt in Richtung Remote Procedure Call wo du eben nicht sagst gib mir folgendes Objekt sondern es ist mehr so f bitte folgende Abfrage aus

01:23:42.607 --> 01:23:55.227
Du hast halt auch nicht eine URL für die unterstrichen Geschichten, sondern du hast halt eine URL, an die alles geht und es gibt nicht mehr Delete, Pad, Putsch

01:23:55.227 --> 01:23:56.807
Push.

01:23:57.807 --> 01:23:59.307
Der mächtigste

01:23:59.307 --> 01:23:59.827
aller

01:23:59.827 --> 01:24:02.648
Aber auch

01:24:02.648 --> 01:24:03.387
Satire.

01:24:05.387 --> 01:24:06.287
Funktioniert nicht immer.

01:24:08.447 --> 01:24:09.007
Genau.

01:24:10.287 --> 01:24:10.607
Es gibt

01:24:10.607 --> 01:24:12.967
eben diese ganzen Werben nicht. Es gibt nur Post.

01:24:13.267 --> 01:24:13.707
Das war's.

01:24:15.027 --> 01:24:16.047
Das ist natürlich

01:24:16.047 --> 01:24:20.227
Hat andere Vor- und Nachteile.

01:24:20.227 --> 01:24:21.927
Es hat halt andere Trade-offs.

01:24:23.287 --> 01:24:23.727
Okay.

01:24:23.727 --> 01:24:26.247
Ich kann aber dann tiefer reingucken

01:24:26.247 --> 01:24:28.427
und bekomme andere

01:24:28.427 --> 01:24:30.527
deutlich fokussiertere Daten

01:24:30.527 --> 01:24:32.527
schneller oder

01:24:32.527 --> 01:24:33.327
worum geht es?

01:24:33.747 --> 01:24:35.347
Eventuell schneller.

01:24:35.907 --> 01:24:37.287
Insbesondere kannst du es steuern.

01:24:37.668 --> 01:24:39.727
Du kannst sagen, ich habe jetzt in diesem Request

01:24:39.727 --> 01:24:41.787
brauche ich alle Objekte,

01:24:42.027 --> 01:24:43.427
die folgende Eigenschaften haben

01:24:43.427 --> 01:24:46.087
und dazu alle, die folgende Eigenschaften haben

01:24:46.087 --> 01:24:48.047
und davon aber nur das Attribut

01:24:48.047 --> 01:24:48.427
Name.

01:24:49.688 --> 01:24:52.507
Anstatt dass du dann halt in deiner Übersichtsliste

01:24:52.507 --> 01:24:54.567
so wie es bei REST ist, erstmal alle abrufen musst,

01:24:54.627 --> 01:24:55.707
um dir Namen anzuzeigen.

01:24:57.087 --> 01:24:58.707
Führst da halt diese eine Abfrage aus

01:24:58.707 --> 01:25:00.547
und kriegst die Liste der Namen zurück, die du

01:25:00.547 --> 01:25:02.648
dann direkt anzeigen kannst. Also diese

01:25:02.648 --> 01:25:04.367
GraphQL-Schnittstelle ist viel

01:25:04.367 --> 01:25:06.168
näher an so einem

01:25:06.168 --> 01:25:07.727
Datenbankinterface

01:25:07.727 --> 01:25:10.407
jetzt ganz spezifisch für

01:25:10.407 --> 01:25:11.447
Graph-Datenbanken,

01:25:12.347 --> 01:25:14.307
als es REST ist.

01:25:15.387 --> 01:25:16.168
REST ist ja wirklich

01:25:16.168 --> 01:25:17.347
eigentlich ein Object-Store.

01:25:17.347 --> 01:25:18.787
Mehr dann Sinn, wenn man

01:25:18.787 --> 01:25:19.668
sowas wie,

01:25:19.668 --> 01:25:24.087
die, ich versuche jetzt mal abstrakt zu visualisieren,

01:25:24.567 --> 01:25:28.507
wolkige Datenformen hat als tabellenförmige Datenformen?

01:25:29.027 --> 01:25:32.847
Ja, wenn du verschachtelte Strukturen hast,

01:25:32.927 --> 01:25:35.707
also wenn du zum Beispiel eine Liste von Freunden von Freunden hast

01:25:35.707 --> 01:25:39.307
oder Kommentare, die auf Kommentare zeigen,

01:25:39.507 --> 01:25:46.127
die irgendwie in so einer Grafenstruktur angeordnet sind,

01:25:46.207 --> 01:25:48.168
weil dann wird es halt mit SQL immer so ein bisschen ätzend,

01:25:48.168 --> 01:25:50.148
das geht auch, aber da muss man sich

01:25:50.148 --> 01:25:50.887
dann was einfallen lassen.

01:25:51.127 --> 01:25:53.727
Also wenn ich in SQL jetzt denken würde, wenn ich

01:25:53.727 --> 01:25:55.707
zu viele Following Keys hätte in meinen

01:25:55.707 --> 01:25:56.688
einzelnen Daten.

01:25:57.047 --> 01:25:59.787
Nee, rekursive.

01:26:00.247 --> 01:26:01.727
Genau, wenn du einen Baum hast oder

01:26:01.727 --> 01:26:03.527
einen Grafen im Allgemeinen.

01:26:04.087 --> 01:26:05.407
Also was da schon schwierig ist,

01:26:05.407 --> 01:26:09.287
in der Datenbank abzubilden.

01:26:09.607 --> 01:26:10.867
Das ist gar nicht so einfach.

01:26:11.047 --> 01:26:14.227
Was sind deine Lieblingsgrafenstrukturen

01:26:14.227 --> 01:26:14.887
in Datenbanken?

01:26:15.927 --> 01:26:17.607
Ich weiß es nicht.

01:26:17.607 --> 01:26:19.067
Ich weiß, dass der

01:26:19.067 --> 01:26:21.487
Autor von FeinCMS

01:26:21.487 --> 01:26:22.987
der

01:26:22.987 --> 01:26:25.127
Treebird, ich weiß nicht genau,

01:26:25.227 --> 01:26:26.107
was er empfindet,

01:26:26.407 --> 01:26:29.127
was ich eine ganze Zeit gemacht habe, ist NesseZ.

01:26:30.467 --> 01:26:31.247
Das geht

01:26:31.247 --> 01:26:32.027
eigentlich ganz gut,

01:26:32.887 --> 01:26:35.087
aber es ist halt schon echt haarig.

01:26:35.387 --> 01:26:37.127
Also das ist schon so,

01:26:38.168 --> 01:26:38.347
ja.

01:26:39.107 --> 01:26:40.668
Bei MatheoLivePaths

01:26:40.668 --> 01:26:42.827
sind die Abfragen so bescheuert.

01:26:43.127 --> 01:26:45.407
Das ist schon cool, aber die Abfragen sind so blöd.

01:26:46.047 --> 01:26:47.327
MatheoLivePaths, Entschuldigung, ihr habt jetzt gerade

01:26:47.327 --> 01:26:48.127
wieder irgendwie...

01:26:48.127 --> 01:26:50.887
Daten...

01:26:50.887 --> 01:26:51.907
Was habt ihr gesagt?

01:26:53.327 --> 01:26:54.107
Dominik googelt.

01:26:56.527 --> 01:26:57.188
Ja, also

01:26:57.188 --> 01:26:58.307
die Frage ist halt, wie

01:26:58.307 --> 01:27:00.747
bildet man solche Strukturen eigentlich

01:27:00.747 --> 01:27:02.927
in der relationalen Datenbank ab?

01:27:02.987 --> 01:27:04.287
Und das ist halt nicht so einfach. Es gibt halt das

01:27:04.287 --> 01:27:07.067
grüne Buch von Joey Chalko oder so.

01:27:08.447 --> 01:27:09.567
Trees and Hierarchies

01:27:09.567 --> 01:27:11.247
in SQL oder so. Das kann man sich

01:27:11.247 --> 01:27:12.688
halt durchlesen. Da stehen die ganzen Methoden, die man

01:27:12.688 --> 01:27:14.188
da verwenden kann, drin.

01:27:16.067 --> 01:27:16.867
Aber tatsächlich,

01:27:16.867 --> 01:27:18.407
Die sind alle schlecht.

01:27:19.207 --> 01:27:21.168
Und die sind alle schlecht. Die sind alle blöd.

01:27:21.767 --> 01:27:23.327
Es ist einfach

01:27:23.327 --> 01:27:25.367
schwierig, Graph-Daten, also

01:27:25.367 --> 01:27:27.327
Vernetzungsnetzwerke

01:27:27.327 --> 01:27:29.287
in eine Tabelle zu schreiben, weil in der Tabelle

01:27:29.287 --> 01:27:31.367
hast du einfach inhärent, kannst

01:27:31.367 --> 01:27:33.207
du keine Netzwerke reinschreiben und

01:27:33.207 --> 01:27:35.327
alles, was man da macht, ist

01:27:35.327 --> 01:27:37.267
ein Hack und die haben alle Vor- und Nachteile

01:27:37.267 --> 01:27:38.087
und die sind alle schlecht.

01:27:40.887 --> 01:27:42.847
Und deshalb gibt es ja auch Graph-Datenbanken

01:27:42.847 --> 01:27:44.607
und eben andere

01:27:44.607 --> 01:27:47.767
NoSQL-Datenbanken, die dafür besser geeignet sind.

01:27:50.047 --> 01:27:51.007
Ja, und ein klassisches

01:27:51.007 --> 01:27:53.767
Anwendungsbeispiel für sowas, wo man das dann halt braucht

01:27:53.767 --> 01:27:56.087
und wo man Schwierigkeiten mit, ist halt sowas wie,

01:27:56.707 --> 01:27:59.668
wenn ich jetzt wissen will, was sind denn jetzt alles meine Freunde

01:27:59.668 --> 01:28:03.027
vierten Grades oder so, dann ist halt

01:28:03.027 --> 01:28:05.827
auf einer SQL-Datenbank, ist halt kacke. War das nicht irgendwie so eine Theorie,

01:28:05.907 --> 01:28:08.648
die sagte, dass man mit allen Freunden oder alle Leute, die

01:28:08.648 --> 01:28:12.047
in Facebook gebraucht haben, am spätesten sind? Genau, Small-World-Theorien, ja.

01:28:12.047 --> 01:28:13.907
6?

01:28:14.727 --> 01:28:14.927
Ja

01:28:14.927 --> 01:28:18.168
6 Degrees of Separation

01:28:18.168 --> 01:28:18.547
heißt es

01:28:18.547 --> 01:28:21.987
6 Degrees of Kevin Bacon heißt es auch

01:28:21.987 --> 01:28:24.127
glaube ich, aber das ist noch was anderes

01:28:24.127 --> 01:28:25.427
Ja, ja, ja

01:28:25.427 --> 01:28:28.247
Ja, aber

01:28:28.247 --> 01:28:29.967
also wie gesagt, GraphQL ist quasi

01:28:29.967 --> 01:28:32.027
so ein Schritt in Richtung RPC

01:28:32.027 --> 01:28:33.907
wieder, wo ich eben einen Endpoint habe, wo ich

01:28:33.907 --> 01:28:35.707
alles hinschicke und dann aber dafür eben

01:28:35.707 --> 01:28:37.747
vergleichsweise komplexe Abfragen ausführen kann

01:28:37.747 --> 01:28:39.847
Ich kann da allerdings auch eben

01:28:39.847 --> 01:28:41.927
vergleichsweise komplexe Updates

01:28:41.927 --> 01:28:44.107
ausführen, dass ich eben sage, ich möchte gerne

01:28:44.107 --> 01:28:48.067
folgende Objekte holen

01:28:48.067 --> 01:28:50.148
und dann auch bearbeiten oder folgende Objekte

01:28:50.148 --> 01:28:51.867
holen und dann auch irgendeine Operation

01:28:51.867 --> 01:28:52.887
aus denen ausführen.

01:28:53.607 --> 01:28:56.467
Das ist

01:28:56.467 --> 01:28:57.267
sehr, sehr mächtig.

01:28:57.727 --> 01:28:59.527
Aber es ist eben nicht mehr so erfahrbar.

01:28:59.648 --> 01:29:01.747
Es ist nicht so durchsichtig wie eine REST API,

01:29:02.447 --> 01:29:03.827
weil man eben wieder

01:29:03.827 --> 01:29:05.787
darauf zurückgeht, dass man die Dokumentation hat,

01:29:05.847 --> 01:29:07.607
dass man die Namen von den Funktionen wissen muss,

01:29:07.688 --> 01:29:09.947
dass man die Attribute von den Objekten

01:29:09.947 --> 01:29:12.287
wissen muss und ich kann nicht DeepLinks drauf machen.

01:29:13.487 --> 01:29:13.947
Was bei einer

01:29:13.947 --> 01:29:15.688
API nicht ungeheuer schlimm ist, aber

01:29:15.688 --> 01:29:16.427
aber

01:29:16.427 --> 01:29:19.907
ja, es ist

01:29:19.907 --> 01:29:21.087
einfach mehr Wissen außenrum.

01:29:22.047 --> 01:29:23.688
Ja, der Client wird halt viel,

01:29:24.148 --> 01:29:25.887
ist halt viel, viel, muss halt viel

01:29:25.887 --> 01:29:27.887
fetter sein sozusagen. Auch eine

01:29:27.887 --> 01:29:30.188
nette Geschichte, kommt darauf an,

01:29:30.227 --> 01:29:31.967
welchen Client und welche Server man so

01:29:31.967 --> 01:29:33.947
verwendet, aber man kann halt auch sowas machen wie

01:29:33.947 --> 01:29:35.787
Subscribe, dass man halt eine

01:29:35.787 --> 01:29:37.047
Query, die man eh stellen muss,

01:29:37.867 --> 01:29:39.867
also man muss sie eh hinschreiben, weil man ja

01:29:39.867 --> 01:29:41.487
irgendwie die Daten holt und dann sagt man halt,

01:29:42.107 --> 01:29:43.827
wenn man daran interessiert ist, Updates davon

01:29:43.827 --> 01:29:45.607
reaktiv zu bekommen, dann sagt man halt einfach nur

01:29:45.607 --> 01:29:48.027
Subscribe und dann kriegt man per WebSocket

01:29:48.027 --> 01:29:49.827
halt Änderungen an dem

01:29:49.827 --> 01:29:51.867
Query-Set, auf das man subscribed ist.

01:29:52.467 --> 01:29:54.007
Und dann kann man tatsächlich, wenn zwei Leute

01:29:54.007 --> 01:29:55.067
irgendwie den gleichen Kram

01:29:55.067 --> 01:29:57.887
editieren oder so, dann sieht man die Änderungen

01:29:57.887 --> 01:29:59.247
von einem anderen halt direkt oder so.

01:29:59.327 --> 01:30:01.027
Das geht alles automatisch. Voll gut.

01:30:01.987 --> 01:30:03.227
Ja, tolle Sachen.

01:30:05.627 --> 01:30:07.327
Ich habe vor einer Weile was gefunden,

01:30:07.707 --> 01:30:09.407
das heißt Graffiti mit PH.

01:30:09.867 --> 01:30:11.747
Graffiti.dev

01:30:11.747 --> 01:30:13.487
Das ist auch ein Link, der da rein muss.

01:30:13.787 --> 01:30:16.148
Das mir sehr gut gefallen hat. Ich weiß noch nicht,

01:30:16.947 --> 01:30:18.027
wie ich damit zurechtkomme

01:30:18.027 --> 01:30:20.067
und ob das... Das ist so ein bisschen

01:30:20.067 --> 01:30:22.188
wie Ruby on Rails. Ruby on Rails hat ja

01:30:22.188 --> 01:30:24.347
früher die ganzen coolen Sachen gekonnt,

01:30:24.347 --> 01:30:26.247
wo Django so ein bisschen

01:30:26.247 --> 01:30:28.227
langweilig war. Und hier ist es jetzt

01:30:28.227 --> 01:30:30.027
wieder genauso. Das ist so eine Ruby-Bibliothek,

01:30:30.607 --> 01:30:31.947
die so ein bisschen die Brücke schlägt

01:30:31.947 --> 01:30:34.188
zwischen REST und GraphQL.

01:30:35.707 --> 01:30:36.227
Das ist quasi

01:30:36.227 --> 01:30:38.627
REST mit ganz vielen Konventionen,

01:30:38.707 --> 01:30:39.387
sodass du

01:30:39.387 --> 01:30:41.887
daraus so eine Art

01:30:41.887 --> 01:30:44.207
GraphQL machst, mit den Vorteilen von beiden Seiten.

01:30:44.887 --> 01:30:46.267
Du kannst coole Queries ausführen,

01:30:46.507 --> 01:30:48.027
aber hast trotzdem die ganzen

01:30:48.027 --> 01:30:49.507
guten Vorteile.

01:30:49.867 --> 01:30:50.987
Okay, interessant, mal angucken.

01:30:52.127 --> 01:30:53.927
Ja, aber es ist, alle Beispiele sind

01:30:53.927 --> 01:30:54.607
in Ruby und

01:30:54.607 --> 01:30:58.027
ich habe noch nicht gefunden,

01:30:58.688 --> 01:30:59.847
ob das auch in

01:30:59.847 --> 01:31:01.907
Python oder gar in Django geht

01:31:01.907 --> 01:31:03.188
und das wäre sehr schön.

01:31:04.668 --> 01:31:06.148
Diese Konzepte, die da drin sind,

01:31:06.188 --> 01:31:08.067
haben mir sehr gut gefallen, weil die halt sehr viel

01:31:08.067 --> 01:31:12.127
über Konventionen machen. Das ist quasi eine Restringstelle mit ganz vielen Konventionen.

01:31:13.927 --> 01:31:16.087
Und auch mit ganz vielen, wo dann eben

01:31:16.087 --> 01:31:20.227
Sachen über Datentypen laufen. Also hier wird dann so eine Ressource

01:31:20.227 --> 01:31:24.148
definiert, die ein Attribut hat, was ein Name ist, was ein String ist, der sortable

01:31:24.148 --> 01:31:27.947
ist, der filterable ist. Und wenn du diese zwei Attribute hast, dann

01:31:27.947 --> 01:31:31.807
weißt du ja schon ganz viel darüber. Dann weißt du schon ganz viele Operationen, die du da machen kannst.

01:31:32.188 --> 01:31:35.887
Was dann eben wieder zurückgeht auf das, was der Dominik eben angesprochen hat.

01:31:35.887 --> 01:31:38.188
man braucht halt sortieren und filtern

01:31:38.188 --> 01:31:40.287
und irgendwie muss man

01:31:40.287 --> 01:31:42.007
das abbilden und warum nicht

01:31:42.007 --> 01:31:44.168
eine gängige Konvention machen und das

01:31:44.168 --> 01:31:45.887
der Ressource mitgeben und sagen, okay, hier

01:31:45.887 --> 01:31:48.188
da steht immer

01:31:48.188 --> 01:31:50.168
dieses, dass es sortierbar ist, ja oder

01:31:50.168 --> 01:31:52.207
nein oder dass es beschreibbar ist, ja oder nein

01:31:52.207 --> 01:31:54.267
dann

01:31:54.267 --> 01:31:56.087
reicht es doch aus, das zu wissen und das ist

01:31:56.087 --> 01:31:57.907
quasi so eine Formalisierung davon

01:31:57.907 --> 01:32:00.407
dass du

01:32:00.407 --> 01:32:02.107
nur noch diese Attribute hast und dann ganz

01:32:02.107 --> 01:32:04.228
viel daraus automatisch rausfällt

01:32:04.228 --> 01:32:13.047
und das ist ein sehr schöner Ansatz, der vielleicht meiner Meinung nach auch sehr zukunftsweisend ist

01:32:13.047 --> 01:32:16.707
und auch noch nicht weit genug überall verfügbar ist.

01:32:16.987 --> 01:32:21.728
Das heißt, du fragst einfach die API und weißt direkt, wie man die benutzen kann, ohne dass du weiter...

01:32:21.728 --> 01:32:26.807
Du fragst quasi die API nach den Datentypen und aus den Datentypen ergeben sich dann Sachen.

01:32:29.148 --> 01:32:32.767
Die API gibt dir auch zu den Datentypen die Operationen zurück,

01:32:32.767 --> 01:33:02.747
und Jochen unterhalten sich über die Programmiersprache Python

01:33:02.767 --> 01:33:04.247
aus beiden fehlt. Das ist eigentlich

01:33:04.247 --> 01:33:06.787
die Vorteile von REST und die Vorteile

01:33:06.787 --> 01:33:07.967
von GraphQL zusammen.

01:33:09.407 --> 01:33:10.787
Leider habe ich es noch nicht

01:33:10.787 --> 01:33:12.407
realisieren können, weil es eben wie gesagt

01:33:12.407 --> 01:33:14.167
so, naja,

01:33:14.247 --> 01:33:16.907
Installation, da steht dann, wie man es

01:33:16.907 --> 01:33:18.447
bei Ruby installiert und dann,

01:33:18.728 --> 01:33:20.107
gut, schade.

01:33:21.607 --> 01:33:22.787
In meine Rails-Applikationen

01:33:23.347 --> 01:33:24.707
könnte ich das jetzt sehr leicht reintun.

01:33:26.507 --> 01:33:26.987
Leider

01:33:26.987 --> 01:33:27.787
habe ich davon keine.

01:33:30.087 --> 01:33:30.728
Ciao, ciao.

01:33:31.987 --> 01:33:32.167
Ja.

01:33:32.767 --> 01:33:34.387
Schade.

01:33:36.407 --> 01:33:37.467
Hätte jemand Lust,

01:33:37.547 --> 01:33:38.767
ein Open-Source-Projekt anzufangen?

01:33:42.127 --> 01:33:42.967
Lust schon.

01:33:43.867 --> 01:33:46.167
Falls sich Sponsoren für dieses Unternehmen

01:33:46.167 --> 01:33:47.847
finden, die melden sich bitte bei

01:33:47.847 --> 01:33:51.127
hallo.pythonpodcast.de

01:33:51.127 --> 01:33:56.027
Ich wäre sehr daran interessiert,

01:33:56.107 --> 01:33:57.907
da einen Sponsor zu finden. Ich würde auch

01:33:57.907 --> 01:33:59.728
meinen üblichen Stundensatz reduzieren,

01:33:59.907 --> 01:34:01.447
selbstverständlich für Open-Source-Work.

01:34:02.767 --> 01:34:03.327
und

01:34:03.327 --> 01:34:05.207
bisher habe ich keinen

01:34:05.207 --> 01:34:06.967
Sponsoren gefunden, der das bezahlen könnte.

01:34:07.087 --> 01:34:08.907
Meine Firma ist leider nicht reich genug,

01:34:10.047 --> 01:34:11.188
um so etwas

01:34:11.188 --> 01:34:13.027
Großes anzugehen. Aber jemand

01:34:13.027 --> 01:34:13.967
sollte das machen, absolut.

01:34:15.847 --> 01:34:16.447
Dankeschön.

01:34:18.927 --> 01:34:19.148
Ja,

01:34:19.247 --> 01:34:20.567
ansonsten, genau, ich weiß nicht,

01:34:21.447 --> 01:34:22.107
auch interessant,

01:34:22.747 --> 01:34:24.827
diese Formate, die man da übertragen kann,

01:34:26.847 --> 01:34:27.487
dazu

01:34:27.487 --> 01:34:29.207
fällt mir gerade noch eine

01:34:29.707 --> 01:34:30.527
Geschichte ein,

01:34:30.667 --> 01:34:32.267
es gibt da so ein

01:34:32.267 --> 01:34:35.148
Podcast, den ich auch immer höre, weil mich

01:34:35.148 --> 01:34:37.148
dieses, im Prinzip dieses ganze, weil ich

01:34:37.148 --> 01:34:38.867
die, die, die, die,

01:34:38.867 --> 01:34:41.287
oh Gott, Hölzchen, Stöckchen,

01:34:41.387 --> 01:34:43.207
ich fange noch weiter vorne an.

01:34:43.228 --> 01:34:44.047
Wir kennen das von Jochen.

01:34:44.047 --> 01:34:44.407
Ja, ja.

01:34:47.827 --> 01:34:48.507
Python Podcast

01:34:48.507 --> 01:34:49.967
ist ja sozusagen in Python

01:34:49.967 --> 01:34:52.188
Genro selber gehostet und

01:34:52.188 --> 01:34:54.148
ja, ich bin nicht

01:34:54.148 --> 01:34:56.067
so richtig super zufrieden damit, also es funktioniert schon

01:34:56.067 --> 01:34:58.027
so, aber so, eigentlich würde mich natürlich nicht interessieren,

01:34:58.087 --> 01:35:00.327
wenn man das richtig macht. Und da gibt es einen anderen Podcast,

01:35:00.747 --> 01:35:02.007
nämlich den Podlovers

01:35:02.007 --> 01:35:02.607
Podcast.

01:35:03.987 --> 01:35:06.287
Und genau, den höre ich

01:35:06.287 --> 01:35:08.127
dann, weil da reden Leute darüber, wie sie das halt

01:35:08.127 --> 01:35:09.967
also, Paddler ist halt das

01:35:09.967 --> 01:35:11.807
WordPress-Plugin. Das ist quasi ein

01:35:11.807 --> 01:35:14.067
Meta-Podcast.

01:35:14.228 --> 01:35:15.487
Ein Podcast-Podcast, ja.

01:35:15.927 --> 01:35:17.407
Ja, oder über Podcasts, genau.

01:35:17.807 --> 01:35:19.148
Und da dachte ich, ja, vielleicht dann, wenn ich das

01:35:19.148 --> 01:35:21.807
an, wenn ich da mal, also ich finde es auch tatsächlich

01:35:21.807 --> 01:35:23.648
ein super Ding und ich höre das

01:35:23.648 --> 01:35:25.767
und versuche mir dann die ganzen guten Ideen alle

01:35:25.767 --> 01:35:27.987
zu stehlen und dann selber zu verwenden.

01:35:28.707 --> 01:35:30.167
Und letztens

01:35:30.167 --> 01:35:32.188
gab es dazu eine interessante

01:35:32.188 --> 01:35:34.107
Episode zu den, auch zu

01:35:34.107 --> 01:35:36.228
Podcast Clients und

01:35:36.228 --> 01:35:38.467
zu Feedpassing

01:35:38.467 --> 01:35:39.967
und sowas und also

01:35:39.967 --> 01:35:41.627
ich weiß jetzt gar nicht, ich möchte gar nicht

01:35:41.627 --> 01:35:44.487
es gab dann einige Episoden schon, ich weiß jetzt nicht mehr genau welche

01:35:44.487 --> 01:35:46.627
wo es darum ging, wie sollen denn die Formate

01:35:46.627 --> 01:35:47.747
und jetzt gibt es auch inzwischen

01:35:47.747 --> 01:35:49.287
Podcasts sind ja so relativ

01:35:49.287 --> 01:35:52.347
gehypte Geschichte auch

01:35:52.347 --> 01:35:54.507
und jetzt kommen Leute

01:35:54.507 --> 01:35:56.507
wieder auf die Idee, nachdem da seit

01:35:56.507 --> 01:35:57.967
zig Jahren

01:35:57.967 --> 01:36:00.728
über 10 Jahre lange nichts an den Standards

01:36:00.728 --> 01:36:02.407
passiert ist. Oh, vielleicht können wir doch mal

01:36:02.407 --> 01:36:03.767
was an den Standards machen, weil

01:36:03.767 --> 01:36:06.587
vielleicht will man ja auch dann

01:36:06.587 --> 01:36:08.327
so ein paar Features ändern oder sich irgendwie

01:36:08.327 --> 01:36:10.267
abgrenzen oder, keine Ahnung, cooler sein als die anderen.

01:36:11.127 --> 01:36:13.107
Und es gibt jetzt podcastindex.org

01:36:13.107 --> 01:36:14.267
und so, wo halt

01:36:14.267 --> 01:36:15.967
das sind auch Leute, die das schon ganz lange machen,

01:36:16.367 --> 01:36:18.327
sich halt wieder so überlegen, ob man da nicht noch

01:36:18.327 --> 01:36:20.527
irgendwelche neuen, interessanten Dinge statisieren kann und so.

01:36:21.587 --> 01:36:22.547
Und da

01:36:22.547 --> 01:36:23.587
ging es dann halt auch immer darum,

01:36:24.728 --> 01:36:26.367
okay, die ursprünglichen Standards

01:36:26.367 --> 01:36:27.827
zu Podcasts oder zu Blogs.

01:36:28.347 --> 01:36:30.228
Das ist halt alles XML, RSS.

01:36:32.167 --> 01:36:33.007
RSS ist XML?

01:36:33.327 --> 01:36:33.467
Ja.

01:36:35.247 --> 01:36:35.728
Genau.

01:36:36.507 --> 01:36:36.527
Und

01:36:36.527 --> 01:36:39.867
die Frage wäre halt,

01:36:40.287 --> 01:36:41.907
okay, und dann gab es irgendwie

01:36:41.907 --> 01:36:44.188
die Idee, oh, man könnte ja

01:36:44.188 --> 01:36:45.747
vielleicht auch JSON-Feeds nehmen.

01:36:46.067 --> 01:36:47.967
So heute macht man ja eigentlich kein

01:36:47.967 --> 01:36:48.807
XML mehr so richtig.

01:36:52.467 --> 01:36:52.947
Und

01:36:52.947 --> 01:36:53.867
wäre das nicht

01:36:53.867 --> 01:36:57.087
wäre das nicht irgendwie besser.

01:36:57.267 --> 01:36:59.747
Und dann hatte ich so den Eindruck,

01:36:59.847 --> 01:37:02.148
da waren Leute doch, fanden XML eigentlich ganz cool

01:37:02.148 --> 01:37:04.367
und dachten so, ne, Jason,

01:37:04.707 --> 01:37:06.228
warum denn? Und lieber XML.

01:37:06.847 --> 01:37:08.688
Und zum Rest hat man dieses Problem ja auch,

01:37:08.767 --> 01:37:10.027
dass man die Daten irgendwie übertragen muss.

01:37:10.127 --> 01:37:11.827
Und da habe ich auch so das Gefühl,

01:37:12.027 --> 01:37:14.587
XML spielt im Grunde keine Rolle mehr so richtig.

01:37:15.527 --> 01:37:17.188
Und alle machen halt irgendwie JSON.

01:37:18.767 --> 01:37:20.307
Ich weiß nicht, man könnte es auch als CSV machen.

01:37:20.367 --> 01:37:21.207
Hat das jemand schon mal gemacht?

01:37:22.927 --> 01:37:23.207
Hm.

01:37:23.867 --> 01:37:31.807
Also ich müsste mal kurz gründen, warum es überhaupt XML gut sein könnte. Ich habe das nämlich letztens irgendwann mal gehört, dass irgendwer meinte, oh, XML wird doch eigentlich total unterschätzt.

01:37:31.807 --> 01:37:33.607
Ja, also

01:37:33.607 --> 01:37:36.247
weiß ich, also ich kann mir

01:37:36.247 --> 01:37:37.267
vorstellen, wie man auf die Idee kommt.

01:37:38.027 --> 01:37:40.027
Ich würde das wahrscheinlich nicht sagen, also ich hatte

01:37:40.027 --> 01:37:41.587
eigentlich nie eine besonders hohe Meinung von XML

01:37:41.587 --> 01:37:42.607
und

01:37:42.607 --> 01:37:46.107
aber ich kann in gewisser Weise verstehen, wie man

01:37:46.107 --> 01:37:47.967
aus einer theoretischen Perspektive sozusagen

01:37:47.967 --> 01:37:49.728
darauf kommt, dass das eine gute Idee wäre, weil

01:37:49.728 --> 01:37:52.027
viele der Probleme, die man sonst hat, wenn man das nicht

01:37:52.027 --> 01:37:54.067
macht, man ja

01:37:54.067 --> 01:37:55.987
vielleicht damit lösen könnte. Also

01:37:55.987 --> 01:37:58.007
zum Beispiel eben, wenn man jetzt sich vergleicht

01:37:58.007 --> 01:37:59.927
mit sowas wie CSV, was früher

01:37:59.927 --> 01:38:02.107
Also, wenn man

01:38:02.107 --> 01:38:03.907
CSV-Probleme hat, dann könnte man

01:38:03.907 --> 01:38:05.307
denken, dass XML vielleicht eine

01:38:05.307 --> 01:38:07.847
Ja, also man könnte sich vorstellen, dass

01:38:07.847 --> 01:38:09.747
XML vielleicht eine gute Idee ist, wenn man jetzt

01:38:09.747 --> 01:38:11.527
Schon mal vorher

01:38:11.527 --> 01:38:14.107
Immer eine gute Idee. Kann man alles

01:38:14.107 --> 01:38:15.527
machen. Ja, kann man.

01:38:17.507 --> 01:38:17.907
Tatsächlich.

01:38:18.327 --> 01:38:18.567
Aber

01:38:18.567 --> 01:38:21.387
Ja, also wenn man jetzt

01:38:21.387 --> 01:38:23.688
sowas wie CSV hat und man hat jetzt

01:38:23.688 --> 01:38:25.627
Probleme, weil irgendwie Leute

01:38:25.627 --> 01:38:27.987
schreiben da komische

01:38:27.987 --> 01:38:29.327
Sachen rein und Dinge gehen kaputt,

01:38:29.327 --> 01:38:32.067
und man sich denkt so, mir reicht's.

01:38:33.067 --> 01:38:37.247
Diese Barbaren, immer was sie da für komische Sachen, also tatsächlich, ich habe auch

01:38:37.247 --> 01:38:41.267
einige Zeit im Import-Export-Geschäft sozusagen von solchen

01:38:41.267 --> 01:38:45.107
Daten verbracht und da passieren halt die komischsten Sachen,

01:38:45.267 --> 01:38:49.188
dass halt irgendwie das Encoding wechselt von Zeile zu Zeile,

01:38:49.728 --> 01:38:52.467
dass IDs halt keine IDs sind, dass irgendwie

01:38:52.467 --> 01:38:57.387
das Escaping sehr kreativ anders ist und das hat halt damit zu tun,

01:38:57.387 --> 01:38:59.567
dass halt da Daten aggregiert werden

01:38:59.567 --> 01:39:00.787
aus unterschiedlichen Datenquellen

01:39:00.787 --> 01:39:03.287
dass die dann irgendwie nochmal als

01:39:03.287 --> 01:39:05.307
Excel irgendjemandem auf dem Tisch landen und der

01:39:05.307 --> 01:39:07.507
editiert dann fröhlich drin rum, speichert es wieder als was anderes

01:39:07.507 --> 01:39:08.707
und schickt es dann nochmal raus oder so

01:39:08.707 --> 01:39:11.407
also da passieren dann wilde Sachen und da

01:39:11.407 --> 01:39:13.467
könnte man sich jetzt denken, oh super, nehme ich

01:39:13.467 --> 01:39:15.527
doch XML, habe ich dieses Problem gelöst

01:39:15.527 --> 01:39:17.887
weil, da sind alle Probleme gelöst

01:39:17.887 --> 01:39:19.527
weil, da habe ich ein Schema, da steht

01:39:19.527 --> 01:39:21.467
drin was das ist und wenn

01:39:21.467 --> 01:39:23.387
da jemand dann Mist macht, dann geht das einfach

01:39:23.387 --> 01:39:25.427
gar nicht. Da steht Spezifikation quasi mit

01:39:25.427 --> 01:39:27.367
in der Datei. Ja und

01:39:27.367 --> 01:39:29.467
in einer anderen Teil-DKD.

01:39:29.467 --> 01:39:30.127
Ah ja, genau.

01:39:34.527 --> 01:39:35.047
Und

01:39:35.047 --> 01:39:36.228
ja,

01:39:36.947 --> 01:39:39.007
tatsächlich ist es aber so, also

01:39:39.007 --> 01:39:41.487
ich würde sagen, eben, es klingt danach, als wäre

01:39:41.487 --> 01:39:42.967
das eine Lösung, praktisch,

01:39:43.728 --> 01:39:44.747
so aus diesem

01:39:44.747 --> 01:39:47.827
Tages-Import-Export-

01:39:47.827 --> 01:39:48.907
Geschäft mit vielen

01:39:48.907 --> 01:39:51.547
Dateien, die da reinkommen

01:39:51.547 --> 01:39:52.867
und rausgehen und

01:39:52.867 --> 01:39:55.228
unterschiedlichen Anforderungen und

01:39:55.228 --> 01:39:57.148
komplizierten und komischen Systemen dahinter

01:39:57.148 --> 01:39:58.547
und seltsamen Leuten und so.

01:39:59.107 --> 01:40:01.267
Muss ich sagen, wir haben

01:40:01.267 --> 01:40:03.287
dann irgendwie, also

01:40:03.287 --> 01:40:05.387
XML und CSV gehabt

01:40:05.387 --> 01:40:06.827
und wir haben immer CSV empfohlen.

01:40:07.887 --> 01:40:09.148
Und XML hat

01:40:09.148 --> 01:40:11.267
zu vielen fiesen Problemen geführt,

01:40:11.927 --> 01:40:13.247
die ehrlich gesagt schlimmer waren als

01:40:13.247 --> 01:40:14.688
das, was wir mit CSV...

01:40:14.688 --> 01:40:15.827
Aber nicht die Encodings.

01:40:16.648 --> 01:40:19.367
Encodings sind gut

01:40:19.367 --> 01:40:20.267
bei XML.

01:40:20.807 --> 01:40:23.148
Ja. Naja, gut.

01:40:23.327 --> 01:40:25.307
Manchmal kriegt man auch so komische Byte-Order-Marker

01:40:25.307 --> 01:40:27.207
vorne dran, die dann irgendwie auch Sachen kaputt machen.

01:40:27.487 --> 01:40:27.907
Aber

01:40:27.907 --> 01:40:31.527
ja, tatsächlich

01:40:31.527 --> 01:40:33.347
aber das Problem

01:40:33.347 --> 01:40:35.167
ist halt, wenn du den Leuten

01:40:35.167 --> 01:40:36.087
halt sozusagen

01:40:36.087 --> 01:40:38.767
das wäre sozusagen

01:40:38.767 --> 01:40:41.207
das Ding, was ich dazu

01:40:41.207 --> 01:40:44.047
ja

01:40:44.047 --> 01:40:47.247
mitgeben wollen würde und die Anekdote dazu

01:40:47.247 --> 01:40:49.688
wäre halt, wenn man

01:40:49.688 --> 01:40:51.427
es unmöglich macht, dass solche Fehler

01:40:51.427 --> 01:40:53.228
passieren, dass halt zum Beispiel das Encoding

01:40:53.228 --> 01:40:54.728
pro Zeile sich ändert oder so.

01:40:55.307 --> 01:41:00.027
dann kann es sein, dass das dazu führt, dass die Fehler schlimmer werden und nicht besser.

01:41:00.547 --> 01:41:02.787
Nämlich, was dann halt tatsächlich passiert, was man dann beobachtet,

01:41:03.148 --> 01:41:06.627
was ist die Konsequenz, wenn man das unmöglich macht, dass solche Fehler passieren?

01:41:07.047 --> 01:41:11.247
Naja, dann kriegt man halt Dateien, die zwar syntaktisch okay sind,

01:41:11.487 --> 01:41:14.367
aber die semantisch halt irgendwie nicht mehr funktionieren.

01:41:14.447 --> 01:41:17.087
Wo dann zum Beispiel Teile einfach fehlen oder die leer sind.

01:41:17.228 --> 01:41:19.847
Die sind dann ein gültiges XML-Dokument, aber es ist halt irgendwie leer.

01:41:20.347 --> 01:41:22.648
Und dann ist halt die Frage, okay, was macht man denn jetzt?

01:41:22.648 --> 01:41:25.127
Oder du hast dann die Fehler in den Daten drin.

01:41:25.127 --> 01:41:27.728
Ich meine, wir haben ja alle schon mal diese UTF-8-Steuerzeichen

01:41:27.728 --> 01:41:29.407
überall

01:41:29.407 --> 01:41:31.467
in Latin-One-Dingern drin gesehen

01:41:31.467 --> 01:41:33.347
und wenn das jemand reinkopiert,

01:41:33.467 --> 01:41:35.387
dann ist halt so. Und dann kannst du auch

01:41:35.387 --> 01:41:36.047
nicht mehr viel machen.

01:41:37.027 --> 01:41:39.347
Genau, und das ist nämlich der Punkt,

01:41:39.767 --> 01:41:41.347
wo es dann eben, wenn dann Fehler

01:41:41.347 --> 01:41:43.027
passieren auf einer anderen Ebene oder halt

01:41:43.027 --> 01:41:45.327
so, dass der XML-Parser sagt, alles okay,

01:41:46.007 --> 01:41:47.567
aber es ist eigentlich gar nicht okay,

01:41:48.167 --> 01:41:49.427
dann kannst du nicht

01:41:49.427 --> 01:41:51.007
mehr viel tun. Bei einem CSV, wo das,

01:41:51.267 --> 01:41:53.287
da kann man immer noch was tun. Wenn da irgendwie eine Exception

01:41:53.287 --> 01:41:55.188
kriegt, da kann man die immer noch fangen und kann sagen,

01:41:55.267 --> 01:41:56.447
okay, den Kunden kenne ich, der

01:41:56.447 --> 01:41:59.107
kann sich nicht einigen, ob er da jetzt

01:41:59.107 --> 01:42:01.287
Latin One oder UTM8

01:42:01.287 --> 01:42:03.507
oder CP51

01:42:03.507 --> 01:42:05.228
weiß ich nicht, das Windows-Dings da verwendet oder so,

01:42:05.688 --> 01:42:07.287
ja, ja, ist schon okay, dann probieren

01:42:07.287 --> 01:42:09.307
wir die mal der Reihe nach durch und einer von den Codecs

01:42:09.307 --> 01:42:10.867
wird schon funktionieren. Meistens

01:42:10.867 --> 01:42:13.228
funktioniert das auch. Und selbst wenn es nicht funktioniert,

01:42:13.667 --> 01:42:15.228
dann ist halt eine Zeile kaputt

01:42:15.228 --> 01:42:17.287
oder so, was oft nicht so schlimm

01:42:17.287 --> 01:42:19.148
ist. Wenn eine von 10.000

01:42:19.148 --> 01:42:20.427
Zeilen kaputt ist, na gut.

01:42:21.287 --> 01:42:22.467
Das ist sozusagen

01:42:22.467 --> 01:42:23.947
das

01:42:23.947 --> 01:42:26.107
degraded gracefully sozusagen.

01:42:26.747 --> 01:42:28.587
Das ist okay.

01:42:28.627 --> 01:42:30.587
Naja, das ist eine sehr interessante Beschreibung

01:42:30.587 --> 01:42:32.367
von graceful degradation.

01:42:32.507 --> 01:42:34.767
Es kommt vielleicht auch noch an, welche Zeile das war.

01:42:34.767 --> 01:42:36.847
Aber im Endeffekt

01:42:36.847 --> 01:42:38.807
da werden

01:42:38.807 --> 01:42:40.228
Leute nicht wütend oder rufen an,

01:42:40.387 --> 01:42:42.367
wenn da eine Zeile nicht okay war.

01:42:42.987 --> 01:42:44.688
Wenn das XML leer war und man jetzt

01:42:44.688 --> 01:42:46.367
raten muss, was passiert ist, möchte

01:42:46.367 --> 01:42:48.987
der Kunde zum Beispiel alle seine Angebote löschen.

01:42:49.067 --> 01:42:50.707
Weil wenn man definiert hat, wenn das ein leeres

01:42:50.707 --> 01:42:51.807
Ding ist, dann

01:42:51.807 --> 01:42:54.087
oder offline schalten, dann

01:42:54.087 --> 01:42:55.188
kann man das tun.

01:42:56.587 --> 01:42:58.467
Das könnte Ärger geben. Oder man macht es nicht.

01:42:58.767 --> 01:43:00.307
Das könnte auch Ärger geben, weil vielleicht

01:43:00.307 --> 01:43:02.228
wollte er es ja tatsächlich machen. Also man muss halt

01:43:02.228 --> 01:43:04.287
irgendwie dann raten und das ist halt

01:43:04.287 --> 01:43:06.148
doof, weil jede dieser

01:43:06.148 --> 01:43:08.307
Entscheidungen, die man trifft, kann halt potenziell

01:43:08.307 --> 01:43:10.067
entweder bei einem selber zu

01:43:10.067 --> 01:43:10.787
irgendwie

01:43:10.787 --> 01:43:13.987
größeren Problemen und Geldverlust oder beim Kunden

01:43:13.987 --> 01:43:15.667
zu größeren Problemen und Geldverlust führen.

01:43:15.987 --> 01:43:18.167
Und das ist halt schlecht, weil das ist halt nicht so

01:43:18.167 --> 01:43:19.027
richtig gracefully.

01:43:19.027 --> 01:43:20.047
und

01:43:20.047 --> 01:43:22.167
ja.

01:43:22.927 --> 01:43:24.827
Das ist so ein bisschen wie diese

01:43:24.827 --> 01:43:27.587
statistische interessante Anormalität,

01:43:27.847 --> 01:43:28.807
als man

01:43:28.807 --> 01:43:31.347
die Helmpflicht für Motorräder eingeführt hat,

01:43:32.148 --> 01:43:33.148
ist die Zahl

01:43:33.148 --> 01:43:34.987
der Kopfverletzungen gestiegen.

01:43:36.188 --> 01:43:37.287
Und der

01:43:37.287 --> 01:43:39.367
Grund ist halt einfach, dass die Leute, die vorher gestorben

01:43:39.367 --> 01:43:40.527
sind, jetzt Kopfverletzungen haben.

01:43:41.807 --> 01:43:42.347
Ah, okay.

01:43:42.347 --> 01:43:44.367
Und so ein bisschen ist es da

01:43:44.367 --> 01:43:46.047
halt auch. Du schließt die

01:43:46.047 --> 01:43:47.867
einfachen Fehler aus

01:43:47.867 --> 01:43:50.907
und deshalb kommen jetzt halt die schlimmen Fehler.

01:43:51.967 --> 01:43:54.767
Ja, eine andere Möglichkeit wäre auch noch, dass die Leute, die vorher

01:43:54.767 --> 01:43:57.927
Fahrrad gefahren sind, jetzt dann halt irgendwie Auto fahren und dann die

01:43:57.927 --> 01:43:59.747
Wahrscheinlichkeit für Kopfverletzungen im Auto steigt oder sowas.

01:43:59.747 --> 01:44:03.747
Ja, genau. Viele unabsehbare Konsequenzen.

01:44:04.787 --> 01:44:05.827
Unintended Konsequenzen.

01:44:05.987 --> 01:44:06.747
Externe Effekte.

01:44:08.707 --> 01:44:10.667
Ja, insofern.

01:44:11.267 --> 01:44:14.267
Jetzt haben wir zu viel über XML geredet in der Restfolge, ehrlich gesagt.

01:44:15.667 --> 01:44:16.807
Ja, das ist ja ausgeschlossen.

01:44:16.807 --> 01:44:18.847
Du kannst ja, auch Jungle Rest Framework

01:44:18.847 --> 01:44:19.787
bietet ja den XML

01:44:19.787 --> 01:44:20.607
Ja, mäh

01:44:20.607 --> 01:44:24.648
Nein, wer will das denn lesen, wer will das denn parsen

01:44:24.648 --> 01:44:26.507
Wer will das denn weiterverarbeiten

01:44:26.507 --> 01:44:27.767
Das ist doch alles total hässlich

01:44:27.767 --> 01:44:30.787
Ja, kann doch sein, dass du irgendeinen Client hast, der das halt

01:44:30.787 --> 01:44:31.927
gerne haben will

01:44:31.927 --> 01:44:34.867
Für Entity and Attributes of Attributes of Attributes of Entities

01:44:34.867 --> 01:44:35.247
Mäh

01:44:35.247 --> 01:44:38.287
XML hat ja auch Vorteile

01:44:38.287 --> 01:44:38.887
Aha

01:44:38.887 --> 01:44:43.567
Zähle uns die doch bitte auf, Jonas

01:44:43.567 --> 01:44:44.547
Nein

01:44:46.807 --> 01:44:52.627
Ich weiß, dass es welche hat, aber ich will es jetzt nicht sagen, weil ich will niemanden dazu verführen

01:44:52.627 --> 01:44:53.307
Na gut

01:44:53.307 --> 01:45:00.127
Ja, anderes Format, auf dem man auch noch gut rumhalten könnte, wäre JSON

01:45:00.127 --> 01:45:07.487
Ich meine tatsächlich, ehrlich gesagt, es hat auch so diverse Hässlichkeiten und so

01:45:07.487 --> 01:45:10.148
Aber JSON funktioniert eigentlich schon

01:45:10.148 --> 01:45:14.728
Also das kann man eigentlich auch, man kann das schon nehmen, es ist nicht so schlimm

01:45:14.728 --> 01:45:44.728


01:45:44.728 --> 01:45:46.567
nicht, was es ist. Das ist auch in Postgres drin.

01:45:47.827 --> 01:45:48.688
Das ist, glaube ich, die ältere

01:45:48.688 --> 01:45:50.787
Variante, aber ja. Ja, kann sein.

01:45:52.707 --> 01:45:52.847
Ja,

01:45:52.947 --> 01:45:54.688
MessagePack ist quasi ein Drop-In-Replacement

01:45:54.688 --> 01:45:56.707
für JSON, nur schneller und

01:45:56.707 --> 01:45:57.567
kleiner.

01:45:58.667 --> 01:46:00.527
Das kann man, glaube ich, bei Django REST-Framework

01:46:00.527 --> 01:46:02.567
kann man das auch irgendwie mit dazu

01:46:02.567 --> 01:46:03.867
konfigurieren. Ja, klar.

01:46:04.567 --> 01:46:06.267
Das ist halt auch so ein Standard.

01:46:06.507 --> 01:46:08.367
Ah, die heißen nicht Serializer, sondern heißen irgendwie anders.

01:46:08.827 --> 01:46:10.407
Das muss man halt in der Konfiguration angeben,

01:46:10.407 --> 01:46:11.347
als Klasse und

01:46:11.347 --> 01:46:14.347
die haben ja ihre Abfolge und wenn der

01:46:14.347 --> 01:46:16.347
Client nichts sagt, dann kriegt das halt in der richtigen...

01:46:17.127 --> 01:46:18.407
Ich glaube, die heißen irgendwie Renderer

01:46:18.407 --> 01:46:20.327
oder sowas. Ja, das kann sein.

01:46:21.087 --> 01:46:22.327
Früher war das tatsächlich,

01:46:22.887 --> 01:46:24.327
konnte man tatsächlich sehr schöne

01:46:24.327 --> 01:46:25.507
Dinge machen, weil halt

01:46:25.507 --> 01:46:28.648
Messagepack-Nachrichten kleiner sind als JSON-Nachrichten

01:46:28.648 --> 01:46:30.367
und in einem Mobile-Umfeld

01:46:30.367 --> 01:46:31.767
war das früher ein sehr

01:46:31.767 --> 01:46:34.387
wichtiger Aspekt,

01:46:34.487 --> 01:46:36.307
dass man unter 65 Kilobyte bleibt,

01:46:36.407 --> 01:46:37.587
weil das eben ein

01:46:37.587 --> 01:46:40.167
Datenpaket war, früher,

01:46:40.407 --> 01:46:42.347
damals, als es

01:46:42.347 --> 01:46:44.247
noch 3G gab oder 2G oder was auch immer.

01:47:14.347 --> 01:47:14.347


01:47:14.347 --> 01:47:15.827
und die Antenne nicht so, das ist ja auch sowas,

01:47:15.907 --> 01:47:17.267
Stromverbrauch,

01:47:17.887 --> 01:47:18.648
wenn man die Antenne

01:47:18.648 --> 01:47:20.447
anschaltet.

01:47:21.947 --> 01:47:23.947
Ja, macht man auch nicht mehr so häufig.

01:47:26.347 --> 01:47:27.247
Ja, eigentlich ist es so.

01:47:27.247 --> 01:47:30.087
Ja, jetzt haben wir noch, ich meine, jetzt haben wir sehr viel

01:47:30.087 --> 01:47:32.007
über REST gesprochen und über Alternativen.

01:47:32.767 --> 01:47:34.148
Im Grunde ist REST ja was

01:47:34.148 --> 01:47:35.887
ganz Simples. Es ist einfach nur

01:47:35.887 --> 01:47:38.287
die HTTP und HTML

01:47:38.287 --> 01:47:39.667
angewendet, äh, nicht HTML,

01:47:39.747 --> 01:47:41.367
HTTP angewendet auf APIs.

01:47:44.347 --> 01:47:44.347


01:47:45.347 --> 01:47:45.747
und

01:47:45.747 --> 01:47:47.987
ja, so sollte man es machen.

01:47:48.267 --> 01:47:49.947
So wäre es gut, wenn man das macht.

01:47:51.747 --> 01:47:51.967
Und

01:47:51.967 --> 01:47:53.467
das ist ja schon

01:47:53.467 --> 01:47:54.947
ein...

01:47:54.947 --> 01:47:57.847
Eine Sache, die ich

01:47:57.847 --> 01:47:59.967
ganz interessant finde, die eventuell nochmal

01:47:59.967 --> 01:48:01.707
dazu führen könnte, dass es halt so ein bisschen

01:48:01.707 --> 01:48:04.027
Renaissance in die Richtung gibt,

01:48:04.148 --> 01:48:05.907
weil man, vielleicht kann man Teile von dem, was man

01:48:05.907 --> 01:48:08.107
jetzt mit GraphQL macht, auch dadurch erreichen, dass man

01:48:08.107 --> 01:48:10.207
Endpunkte miteinander kombiniert

01:48:10.207 --> 01:48:12.067
oder irgendwelche Aggregationsendpunkte macht

01:48:13.447 --> 01:48:13.847
und

01:48:13.847 --> 01:48:36.547
die dann halt per Async, also normalerweise würde man sagen, viele Requests machen nicht so cool, weil blockiert halt immer alle, immer einen Worker im Applikationsserver, aber wenn man jetzt Async hat, dann ist es vielleicht auch egal und dann kann man sich sozusagen seine Ergebnissets auch so ein bisschen darüber zusammenbasteln und diese Dinge halt Endpunkte vielleicht so on the fly generieren oder weiß ich nicht.

01:48:36.547 --> 01:48:37.667
naja.

01:48:38.087 --> 01:48:40.927
Da gibt es übrigens einen Artikel zu,

01:48:40.967 --> 01:48:42.427
wenn ich jetzt mal da Werbung machen darf,

01:48:42.427 --> 01:48:44.987
auf deinem Blog, Jochen,

01:48:45.387 --> 01:48:47.427
über diese Async-Aggregations-API.

01:48:47.527 --> 01:48:48.887
Hast du da einen kleinen Beitrag

01:48:48.887 --> 01:48:49.327
zu geschrieben?

01:48:49.547 --> 01:48:50.107
Achso, ja,

01:48:52.387 --> 01:48:54.387
das ist aber sozusagen nur quasi,

01:48:54.487 --> 01:48:56.547
wenn man andere APIs abfragt,

01:48:56.688 --> 01:48:58.148
das ist natürlich auch ein Anwendungsfall für Async,

01:48:58.267 --> 01:49:00.107
weil eben man dann halt nur auf den,

01:49:00.667 --> 01:49:02.148
die Zeit, die Latenz ist nur die

01:49:02.148 --> 01:49:04.627
Zeit, die der längst laufende Request braucht

01:49:04.627 --> 01:49:06.467
und nicht mehr, wenn man das synchron abfragt.

01:49:06.547 --> 01:49:08.627
halt alle aufsummiert.

01:49:09.267 --> 01:49:10.688
Und genau, aber es wäre ja auch

01:49:10.688 --> 01:49:12.648
sozusagen, wenn diese Dinge,

01:49:12.707 --> 01:49:14.188
die man fragt, interne andere

01:49:14.188 --> 01:49:16.487
API-Endpoints sind und man dann irgendwie noch eine Transformation

01:49:16.487 --> 01:49:17.787
drauf macht und das dann raus schickt.

01:49:18.427 --> 01:49:18.907
Microservices.

01:49:20.507 --> 01:49:20.688
Ja.

01:49:23.728 --> 01:49:24.827
Buzzword Bingo.

01:49:26.287 --> 01:49:26.567
Ich glaube, wir haben

01:49:26.567 --> 01:49:26.927
das voll.

01:49:27.967 --> 01:49:30.467
Meine Consulting-Kosten

01:49:30.467 --> 01:49:31.747
haben sich eben verdoppelt.

01:49:33.407 --> 01:49:34.567
Ja, wobei

01:49:34.567 --> 01:49:41.067
Microservice-Integration würde ich ehrlich gesagt auch nicht unbedingt über REST oder HTTP machen.

01:49:42.107 --> 01:49:43.747
Ich weiß nicht, wie der das so macht.

01:49:43.927 --> 01:49:44.567
Über was?

01:49:45.427 --> 01:49:46.907
Wahrscheinlich über eine Message-Queue.

01:49:48.648 --> 01:49:48.967
Okay.

01:49:49.167 --> 01:49:56.247
Einfach deswegen, weil du dann zum Beispiel bei HTTP hast du halt diesen Overhead immer der Verbindung, die du aufmachen musst.

01:49:58.407 --> 01:50:00.527
Ja gut, der geht ja mit Technik weg.

01:50:00.527 --> 01:50:05.487
Ja, und intern musst du dann vielleicht auch nicht immer authentifizieren und sowas, aber

01:50:05.487 --> 01:50:07.167
ja

01:50:07.167 --> 01:50:10.547
Ja, okay, wie auch immer

01:50:10.547 --> 01:50:12.107
Darauf müssen wir auch nochmal sprechen

01:50:12.107 --> 01:50:17.047
Genau, also das wäre halt vielleicht ein

01:50:17.047 --> 01:50:22.067
ein Ding, wie man sozusagen damit umgehen könnte

01:50:22.067 --> 01:50:26.867
dass man ansonsten eine Explosion von Endpunkten hat

01:50:26.867 --> 01:50:30.367
und ganz viele Abfragen machen muss, wenn man bei REST

01:50:30.367 --> 01:50:31.407
im Vergleich zu Udaf.tl.

01:50:32.547 --> 01:50:33.447
Aber ja.

01:50:35.688 --> 01:50:36.087
Okay.

01:50:36.267 --> 01:50:36.567
Keine Ahnung.

01:50:38.107 --> 01:50:39.287
Ich würde sagen, wir haben ziemlich

01:50:39.287 --> 01:50:40.547
bei Resten heute gesprochen.

01:50:41.527 --> 01:50:44.087
Habt ihr noch irgendwas auf eurer Liste, was ihr noch loswerden wollt heute?

01:50:44.228 --> 01:50:45.287
Weil sonst würde ich nämlich sagen,

01:50:46.747 --> 01:50:47.307
packen wir es.

01:50:49.007 --> 01:50:50.607
Nö, ich habe sonst auch nichts mehr.

01:50:50.887 --> 01:50:51.707
Ich fand es schön,

01:50:51.947 --> 01:50:52.787
viel wieder gelernt.

01:50:53.807 --> 01:50:55.467
Ich hoffe, ihr bleibt uns weiter gewogen,

01:50:55.467 --> 01:50:57.607
hört uns weiter und schreibt uns

01:50:57.607 --> 01:50:59.347
in euren Fag, euren Lob, Hass, Kommentare,

01:50:59.347 --> 01:51:01.688
alles, was ihr loswerden wollt, an

01:51:01.688 --> 01:51:03.667
hallo.pythonpodcast.de

01:51:03.667 --> 01:51:05.767
Schön, dass ihr wieder eingeschaltet habt.

01:51:06.627 --> 01:51:07.987
Vielen Dank, dass ihr wieder alle dabei wart.

01:51:08.087 --> 01:51:08.927
Vielen Dank, Johannes.

01:51:10.607 --> 01:51:11.567
Und ja,

01:51:12.707 --> 01:51:13.467
hört uns das nächste Mal wieder.

01:51:14.487 --> 01:51:15.527
Alles klar. Bis dann.

01:51:15.527 --> 01:51:16.787
Bis zum nächsten Mal. Tschüss.

01:51:17.247 --> 01:51:18.027
Wir haben die Pics vergessen.

01:51:18.407 --> 01:51:19.527
Machen wir dann heute nicht.

01:51:20.688 --> 01:51:21.387
Tschö, tschö.
