KIM JESTEM?
▸ Michał Taszycki (@mehowte)
▸ 16 lat doświadczenia w programowaniu
▸ Twórca programów szkoleniowych
▸ GraphQL Mastery
▸ Kurs Reacta
▸ Organizator Festiwalu React.js i GraphQL
Slide 3
Slide 3 text
CO TO JEST REST API?
Slide 4
Slide 4 text
CO TO JEST REST API?
1. Ścisła specyfikacja architektury API serwera
Slide 5
Slide 5 text
CO TO JEST REST API?
1. Ścisła specyfikacja architektury API serwera
2. Potoczna nazwa wszystkich API,
które zwraca JSON ;)
Slide 6
Slide 6 text
SERWER MA RÓŻNE ZASOBY
• Książki
•Autorzy
•Użytkownicy
•Egzemplarze książek
Slide 7
Slide 7 text
ZASOBY MAJĄ OPERACJE
• Książki (pobierz listę, pobierz detale)
•Autorzy (pobierz listę, pobierz detale)
•Użytkownicy (zaloguj, edytuj, pobierz listę)
•Egzemplarze książek (wypożycz, oddaj)
Slide 8
Slide 8 text
OPERACJE MAJĄ METODĘ HTTP I URL
• GET example.com/books
(pobierz listę książek)
•GET example.com/books/32
(pobierz szczegóły książki o id 32)
Slide 9
Slide 9 text
OPERACJE MAJĄ METODĘ HTTP I URL
• POST example.com/users
(dodaj użytkownika)
•PUT lub PATCH example.com/users/44
(uaktualnij użytkownika o id 44)
•PUT lub PATCH example.com/users/45
(usuń użytkownika o id 45)
Slide 10
Slide 10 text
OPERACJE MAJĄ METODĘ HTTP I URL
• POST example.com/users
(dodaj użytkownika)
•PUT lub PATCH example.com/users/44
(uaktualnij użytkownika o id 44)
•DELETE example.com/users/45
(usuń użytkownika o id 45)
Slide 11
Slide 11 text
TO DZIAŁA W OPERACJACH CRUD
•POST tworzy
•GET pobiera bez modyfikacji
•PUT lub PATCH uaktualnia
•DELETE usuwa
CREATE
READ
UPDATE
DELETE
Slide 12
Slide 12 text
W NIETYPOWYCH OPERACJACH JEST TRUDNIEJ
• PUT example.com/login
(zaloguj użytkownika - modyfikacja użytkownika)
•PUT example.com/logout
(wyloguj użytkownika - modyfikacja użytkownika)
Slide 13
Slide 13 text
W NIETYPOWYCH OPERACJACH JEST TRUDNIEJ
• POST example.com/session
(zaloguj użytkownika - stwórz sesję)
•DELETE example.com/session
(wyloguj użytkownika - usuń sesję)
Slide 14
Slide 14 text
• PUT example.com/users/44/book-copies/12?borrow
(wypożycz od użytkownika 44 egzemplarz książki 12
zmodyfikuj zasób egzemplarza)
•PUT example.com/users/44/book-copies/12?return
(oddaj użytkownikowi 44 egzemplarz książki 12
zmodyfikuj zasób egzemplarza)
W NIETYPOWYCH OPERACJACH JEST TRUDNIEJ
Slide 15
Slide 15 text
• POST example.com/book-rentals
(wypożycz egzemplarz książki -
stwórz zasób wypożyczenia)
•DELETE example.com/book-rentals
(oddaj egzemplarz książki -
usuń zasób wypożyczenia)
W NIETYPOWYCH OPERACJACH JEST TRUDNIEJ
Slide 16
Slide 16 text
1. Nie wszystko jest ustandaryzowane
2. Overfetching
3. Underfetching
4. Dużo zapytań
5. Dokumentacja?
PROBLEMY Z REST API
Slide 17
Slide 17 text
OVERFETCHING
Slide 18
Slide 18 text
1. Wypisz listę książek - tylko id i tytuły
OVERFETCHING
Slide 19
Slide 19 text
1. Wypisz listę książek - tylko id i tytuły
2. Z API przychodzi za dużo danych
(ISBN, opis, pierwszy rozdział, …)
OVERFETCHING
Slide 20
Slide 20 text
1. Wypisz listę książek - tylko id i tytuły
2. Z API przychodzi za dużo danych
(ISBN, opis, pierwszy rozdział, …)
3. Dodaj parametr do url?
(GET example.com/books?only=title,id)
OVERFETCHING
Slide 21
Slide 21 text
1. Wypisz listę książek - tylko id i tytuły
2. Z API przychodzi za dużo danych
(ISBN, opis, pierwszy rozdział, …)
3. Dodaj parametr do url?
(GET example.com/books?only=title,id)
4. To nie jest STANDARD :(
OVERFETCHING
Slide 22
Slide 22 text
UNDERFETCHING
Slide 23
Slide 23 text
1. Wypisz listę książek - tytuł książki i nazwisko autora
UNDERFETCHING
Slide 24
Slide 24 text
1. Wypisz listę książek - tytuł książki i nazwisko autora
2. GET example.com/books?only=id,title,author_id
UNDERFETCHING
Slide 25
Slide 25 text
1. Wypisz listę książek - tytuł książki i nazwisko autora
2. GET example.com/books?only=id,title,author_id
3. Dla każdego ID autora
(GET example.com/authors/ )
UNDERFETCHING
Slide 26
Slide 26 text
1. Wypisz listę książek - tytuł książki i nazwisko autora
2. GET example.com/books?only=id,title,author_id
3. Dla każdego ID autora
(GET example.com/authors/ )
4. Problem N+1 i overfetching dla autorów.
UNDERFETCHING
Slide 27
Slide 27 text
ZA DUŻO ZAPYTAŃ
Slide 28
Slide 28 text
1. Wyświetl dashboard w aplikacji
ZA DUŻO ZAPYTAŃ
Slide 29
Slide 29 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
ZA DUŻO ZAPYTAŃ
Slide 30
Slide 30 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
3. GET example.com/users/42/books
ZA DUŻO ZAPYTAŃ
Slide 31
Slide 31 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
3. GET example.com/users/42/books
4. GET example.com/users/42/authors?favorite=true
ZA DUŻO ZAPYTAŃ
Slide 32
Slide 32 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
3. GET example.com/users/42/books
4. GET example.com/users/42/authors?favorite=true
5. GET example.com/book-copies?borrowedAt=today
ZA DUŻO ZAPYTAŃ
Slide 33
Slide 33 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
3. GET example.com/users/42/books
4. GET example.com/users/42/authors?favorite=true
5. GET example.com/book-copies?borrowedAt=today
6. GET example.com/quotes/random
ZA DUŻO ZAPYTAŃ
Slide 34
Slide 34 text
1. Wyświetl dashboard w aplikacji
2. GET example.com/users/42
3. GET example.com/users/42/books
4. GET example.com/users/42/authors?favorite=true
5. GET example.com/book-copies?borrowedAt=today
6. GET example.com/quotes/random
7. GET example.com/weather-forecast
ZA DUŻO ZAPYTAŃ
Slide 35
Slide 35 text
OK… A GRAPHQL?
Slide 36
Slide 36 text
1. Ścisła specyfikacja API klienta i serwera
OK… A GRAPHQL?
Slide 37
Slide 37 text
1. Ścisła specyfikacja API klienta i serwera
2. Którą WSZYSCY respektują!
OK… A GRAPHQL?
Slide 38
Slide 38 text
GRAPHQL W PIGUŁCE
Slide 39
Slide 39 text
1. Jeden endpoint
GRAPHQL W PIGUŁCE
Slide 40
Slide 40 text
1. Jeden endpoint
2. Zwykle POST example.com/graphql
GRAPHQL W PIGUŁCE
Slide 41
Slide 41 text
1. Jeden endpoint
2. Zwykle POST example.com/graphql
3. Serwer definiuje schemat danych
GRAPHQL W PIGUŁCE
Slide 42
Slide 42 text
1. Jeden endpoint
2. Zwykle POST example.com/graphql
3. Serwer definiuje schemat danych
4. Klient ma prosty język zapytań
GRAPHQL W PIGUŁCE
Slide 43
Slide 43 text
1. Jeden endpoint
2. Zwykle POST example.com/graphql
3. Serwer definiuje schemat danych
4. Klient ma prosty język zapytań
5. Można robić wiele rzeczy na raz!
GRAPHQL W PIGUŁCE
Slide 44
Slide 44 text
CO ROBIMY W GRAPHQL?
Slide 45
Slide 45 text
1. Z serwera dostajemy dokumentację API
(automatycznie wygenerowaną)
CO ROBIMY W GRAPHQL?
Slide 46
Slide 46 text
1. Z serwera dostajemy dokumentację API
(automatycznie wygenerowaną)
2. Odpytujemy o dane za pomocą zapytań
(Query)
CO ROBIMY W GRAPHQL?
Slide 47
Slide 47 text
1. Z serwera dostajemy dokumentację API
(automatycznie wygenerowaną)
2. Odpytujemy o dane za pomocą zapytań
(Query)
3. Modyfikujemy dane mutacjami
(Mutation)
CO ROBIMY W GRAPHQL?
Slide 48
Slide 48 text
GRAPHQL SCHEMA
Slide 49
Slide 49 text
AUTOMATYCZNA DOKUMENTACJA
Slide 50
Slide 50 text
ZAPYTANIA GRAPHQL
Slide 51
Slide 51 text
ZAPYTANIA GRAPHQL
Slide 52
Slide 52 text
ZAPYTANIA GRAPHQL
Slide 53
Slide 53 text
ZAPYTANIA GRAPHQL
Slide 54
Slide 54 text
ZAPYTANIA GRAPHQL
Slide 55
Slide 55 text
ZAPYTANIA GRAPHQL
Slide 56
Slide 56 text
ZAPYTANIA GRAPHQL
Slide 57
Slide 57 text
MUTACJE GRAPHQL
Slide 58
Slide 58 text
MUTACJE GRAPHQL
Slide 59
Slide 59 text
MUTACJE GRAPHQL
Slide 60
Slide 60 text
MUTACJE GRAPHQL
Slide 61
Slide 61 text
MUTACJE GRAPHQL
Slide 62
Slide 62 text
MUTACJE GRAPHQL
Slide 63
Slide 63 text
MUTACJE GRAPHQL
Slide 64
Slide 64 text
MUTACJE GRAPHQL
Slide 65
Slide 65 text
MUTACJE GRAPHQL
Slide 66
Slide 66 text
MUTACJE GRAPHQL
Slide 67
Slide 67 text
MUTACJE GRAPHQL
Slide 68
Slide 68 text
PROBLEMY GRAPHQL
Slide 69
Slide 69 text
PROBLEMY GRAPHQL
1. Cache
2. Optymalizacja złożonych zapytań
3. Denial of Service
Slide 70
Slide 70 text
PROBLEMY GRAPHQL
Slide 71
Slide 71 text
PROBLEMY GRAPHQL
☠
Slide 72
Slide 72 text
CO WYBRAĆ?
Slide 73
Slide 73 text
DLACZEGO REST?
Slide 74
Slide 74 text
DLACZEGO REST?
1. Publicznie dostępne API
(REST łatwiej zabezpieczyć)
Slide 75
Slide 75 text
DLACZEGO REST?
1. Publicznie dostępne API
(REST łatwiej zabezpieczyć)
2. Stabilne API
(w REST trudniej wprowadzać zmiany)
Slide 76
Slide 76 text
DLACZEGO REST?
1. Publicznie dostępne API
(REST łatwiej zabezpieczyć)
2. Stabilne API
(w REST trudniej wprowadzać zmiany)
3. Aplikacja to typowy CRUD
(wystarczy GET, POST, PUT, DELETE)
Slide 77
Slide 77 text
DLACZEGO REST?
1. Publicznie dostępne API
(REST łatwiej zabezpieczyć)
2. Stabilne API
(w REST trudniej wprowadzać zmiany)
3. Aplikacja to typowy CRUD
(wystarczy GET, POST, PUT, DELETE)
4. Aplikacja ma już swoje lata :)
Slide 78
Slide 78 text
DLACZEGO GRAPHQL?
Slide 79
Slide 79 text
DLACZEGO GRAPHQL?
Bo to sama przyjemność! :)
Slide 80
Slide 80 text
DLACZEGO GRAPHQL?
1. Wewnętrzne API
(mobilne i webowe apki chcą innych danych)
Slide 81
Slide 81 text
DLACZEGO GRAPHQL?
1. Wewnętrzne API
(mobilne i webowe apki chcą innych danych)
2. Prototypowanie i startupy
(w GraphQL łatwiej wprowadzać zmiany)
Slide 82
Slide 82 text
DLACZEGO GRAPHQL?
1. Wewnętrzne API
(mobilne i webowe apki chcą innych danych)
2. Prototypowanie i startupy
(w GraphQL łatwiej wprowadzać zmiany)
3. Aplikacja to nie tylko CRUD
(w GraphQL łatwiej modelować zdarzenia biznesowe)
Slide 83
Slide 83 text
DLACZEGO GRAPHQL?
1. Wewnętrzne API
(mobilne i webowe apki chcą innych danych)
2. Prototypowanie i startupy
(w GraphQL łatwiej wprowadzać zmiany)
3. Aplikacja to nie tylko CRUD
(w GraphQL łatwiej modelować zdarzenia biznesowe)
4. Integracja danych z różnych źródeł
(1 serwer proxy w GraphQL)