About me
!
Christian Leo-Pernold
"#$%&'(⛰*+,-
.
@mazedlx
⭐
github.com/mazedlx
0
mazedlx.net
1
repod.at
1
gusch.fredl.at
2/55
Slide 3
Slide 3 text
Let's talk about APIs
3/55
Slide 4
Slide 4 text
REST
REpresentational State Transfer
4/55
Slide 5
Slide 5 text
5/55
Slide 6
Slide 6 text
1. GET /episodes/1
6/55
Slide 7
Slide 7 text
1. GET /episodes/1
2. GET /actors/1
7/55
Slide 8
Slide 8 text
1. GET /episodes/1
2. GET /actors/1
3. GET /actors/2
8/55
Slide 9
Slide 9 text
1. GET /episodes/1
2. GET /actors/1
3. GET /actors/2
4. GET /actors/3
9/55
Slide 10
Slide 10 text
1. GET /episodes/1
2. GET /actors/1
3. GET /actors/2
4. GET /actors/3
5. GET /actors/4
10/55
Slide 11
Slide 11 text
1. GET /episodes/1
2. GET /actors/1
3. GET /actors/2
4. GET /actors/3
5. GET /actors/4
6. GET /reviews/1
11/55
Slide 12
Slide 12 text
6
calls to the API
12/55
Slide 13
Slide 13 text
13/55
Slide 14
Slide 14 text
GET /episodes/1
14/55
Slide 15
Slide 15 text
15/55
Slide 16
Slide 16 text
But then things change
16/55
Slide 17
Slide 17 text
GET /episodes/1
GET /episodes_with_everything_i_need/1
GET /episodes_with_everything_also_highres_images/1
GET /episodes_with_everything_but_for_mobile/1
GET /episodes_with_everything_for_iphone_only_v2/1
GET /episodes_with_everything_but_without_images/1
...
GET /episodes_with_everything_but_without_reviews/1
17/55
Slide 18
Slide 18 text
18/55
Slide 19
Slide 19 text
What if we could just
tell
the API what we want?
19/55
Slide 20
Slide 20 text
GraphQL
20/55
Slide 21
Slide 21 text
A query language
for your API
21/55
Slide 22
Slide 22 text
Created by Facebook
22/55
Slide 23
Slide 23 text
23/55
Slide 24
Slide 24 text
Open Source
24/55
Slide 25
Slide 25 text
PHP, Python, Ruby,
Java, Go, JavaScript,
Node, Angular, React,
Vue, Ember and more
25/55
Slide 26
Slide 26 text
Facebook
GitHub
Shopify
Yelp
Pinterest
26/55
Slide 27
Slide 27 text
GraphQL isn't:
27/55
Slide 28
Slide 28 text
a silver bullet
28/55
Slide 29
Slide 29 text
a REST replacement
29/55
Slide 30
Slide 30 text
30/55
Slide 31
Slide 31 text
31/55
Slide 32
Slide 32 text
32/55
Slide 33
Slide 33 text
33/55
Slide 34
Slide 34 text
34/55
Slide 35
Slide 35 text
Problem
❌
N+1
35/55
Slide 36
Slide 36 text
REST
36/55
Slide 37
Slide 37 text
GraphQL
37/55
Slide 38
Slide 38 text
Solution
✅
Batching with Dataloaders
38/55
Slide 39
Slide 39 text
Problem
❌
Caching
39/55
Slide 40
Slide 40 text
GET /episodes/1
40/55
Slide 41
Slide 41 text
POST /graphql
41/55
Slide 42
Slide 42 text
How does one cache a POST request?
42/55
Slide 43
Slide 43 text
Solution
✅
Caching with Dataloaders
43/55
Slide 44
Slide 44 text
Problem
❌
Schema Duplication
44/55
Slide 45
Slide 45 text
45/55
Slide 46
Slide 46 text
46/55
Slide 47
Slide 47 text
Solution
✅
Schema Generators
47/55
Slide 48
Slide 48 text
Problem
❌
Poor Performance
48/55
Slide 49
Slide 49 text
Solution
✅
Query Caching
49/55
Slide 50
Slide 50 text
It's Demo Time!
Laravel app (^7.0)
Users, articles and comments
1.000 articles, 3.000 comments, 4.000 users seeded
Eloquent relations are set
50/55