Skip to content

Commit 7224d8c

Browse files
committed
chore: Add documentation on REST vs GraphQL.
1 parent 586e561 commit 7224d8c

File tree

1 file changed

+96
-0
lines changed
  • documentation/06-integration/02-rest-vs-graphql

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# REST vs GraphQL
2+
3+
- These: Fachlichkeit vor Technologie
4+
- Commands und Queries als fachliche Ankerpunkte
5+
- HTTP + JSON reichen (erst einmal) völlig aus
6+
- KISS: Technologie dient der Fachlichkeit, nicht umgekehrt
7+
- Verben sind wichtig, sie drücken Intention aus
8+
- Commands vs Queries
9+
- Commands ändern den Zustand, aber geben nichts zurück
10+
- Queries ändern den Zustand nicht, geben aber etwas zurück
11+
12+
```
13+
POST /submit-order (fachlich)
14+
vs
15+
POST /order (technisch)
16+
17+
GET /get-pending-todos
18+
vs
19+
GET /todos?filterField=status&filterValue=pending
20+
```
21+
22+
- REST (Representational State Transfer)
23+
- Roy Fielding, im Jahr 2000
24+
- URL: "Alles ist eine Ressource" => Substantiv
25+
- HTTP-Verben: GET, POST, PUT, DELETE, PATCH, …
26+
- HATEOAS
27+
- Hypermedia as the Engine of Application State
28+
- GraphQL (Graph Query Language)
29+
- Facebook, im Jahr 2012
30+
- Client (!) definiert Abfragen auf Graph, die vom Server ausgeführt werden
31+
- Statisches Typsystem
32+
- Drei Arten von Interaktionsmöglichkeiten mit dem Graphen
33+
- Queries: Entsprechen Queries
34+
- Mutations: Entsprechen Commands
35+
- Subscriptions: Entsprechen Events
36+
- GraphQL hat seinen Preis
37+
- Caching
38+
- Funktioniert bei REST so wie bei HTTP
39+
- GraphQL verwendet ausschließlich `POST /graphql`
40+
- Deshalb ist Caching bei GraphQL sehr viel komplexer
41+
- Letztlich muss sich der Client von Hand darum kümmern
42+
- "Parse, Don't Validate"
43+
- JSON Schema in Verbindung mit OpenAPI
44+
45+
```json
46+
{
47+
"type": "object",
48+
"properties": {
49+
"name": {
50+
"type": "string",
51+
"minLength": 3
52+
},
53+
"xp": {
54+
"type": "number",
55+
"min": 0,
56+
"max": 100
57+
}
58+
},
59+
"required": [ "name", "xp" ],
60+
"additionalProperties": false
61+
}
62+
```
63+
64+
- Cross-Cutting Concerns
65+
- Versionierung
66+
- HTTP-Route
67+
- `/api/v1/submit-order`
68+
- `/api/1.0.0/submit-order`
69+
- `/api/2025-10-17/submit-order`
70+
- Client verwendet entweder das *aktuelle* Datum für die Latest-Route oder ein hart-codiertes Datum, wo man dann weiß, wann das zum letzten Mal "angefasst" wurde
71+
- HTTP-Header
72+
- `X-Version: v1`
73+
- `X-Version: 1.0.0`
74+
- Sicherheit
75+
- Authentifizierung und Autorisierung
76+
- Bei GraphQL ist Query-Analyse erforderlich
77+
- Monitoring
78+
- Tracing für fachliche (evtl. verteilte) Prozesse
79+
80+
- gRPC für Service-zu-Service-Kommunikation
81+
- Stark typisiert
82+
- Sehr kompakt
83+
- Sehr performant
84+
- Aber: Es hat seinen Preis
85+
- tRPC auf Basis von TypeScript
86+
- Typsicherheit, aber "ohne Schema"
87+
- Ende-zu-Ende-Verwendung von TypeScript
88+
89+
- Entscheidungsmatrix
90+
- Mit HTTP + JSON beginnen (mit Commands und Queries)
91+
- Alles Weitere erst bei Bedarf
92+
- Typische Fehler
93+
- GraphQL, gRPC, tRPC, … als magische Silver Bullet
94+
- Aufwand und Abhängigkeiten für GraphQL, gRPC, tRPC, … unterschätzen
95+
- Technische Patterns statt fachlicher Ausrichtung
96+
- Over-Engineering

0 commit comments

Comments
 (0)