Slide 1

Slide 1 text

GraphQL

Slide 2

Slide 2 text

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

Slide 51

Slide 51 text

GraphQL is (kind of) self-documenting 51/55

Slide 52

Slide 52 text

& PHP 52/55

Slide 53

Slide 53 text

Laravel https://github.com/nuwave/lighthouse Symfony https://github.com/overblog/GraphQLBundle 53/55

Slide 54

Slide 54 text

Plain PHP https://github.com/webonyx/graphql-php GraphQL Framework in PHP https://github.com/railt/railt 54/55

Slide 55

Slide 55 text

!" Slides can be found at speakerdeck.com/mazedlx 55/55