Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL vs REST API - Kto wygra?

GraphQL vs REST API - Kto wygra?

Co to jest GraphQL i czym różni się od REST API?
Czy warto w ogóle uczyć się GraphQL?
Kiedy warto używać jednego lub drugiego?
Odpowiedzi na te pytania znajdziesz w tej prezentacji!

Michał Taszycki

November 27, 2020
Tweet

More Decks by Michał Taszycki

Other Decks in Programming

Transcript

  1. 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
  2. CO TO JEST REST API? 1. Ścisła specyfikacja architektury API

    serwera 2. Potoczna nazwa wszystkich API, które zwraca JSON ;)
  3. 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)
  4. 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)
  5. 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)
  6. 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)
  7. TO DZIAŁA W OPERACJACH CRUD •POST tworzy •GET pobiera bez

    modyfikacji •PUT lub PATCH uaktualnia •DELETE usuwa CREATE READ UPDATE DELETE
  8. 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)
  9. W NIETYPOWYCH OPERACJACH JEST TRUDNIEJ • POST example.com/session (zaloguj użytkownika

    - stwórz sesję) •DELETE example.com/session (wyloguj użytkownika - usuń sesję)
  10. • 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
  11. • 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
  12. 1. Nie wszystko jest ustandaryzowane 2. Overfetching 3. Underfetching 4.

    Dużo zapytań 5. Dokumentacja? PROBLEMY Z REST API
  13. 1. Wypisz listę książek - tylko id i tytuły 2.

    Z API przychodzi za dużo danych (ISBN, opis, pierwszy rozdział, …) OVERFETCHING
  14. 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
  15. 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
  16. 1. Wypisz listę książek - tytuł książki i nazwisko autora

    2. GET example.com/books?only=id,title,author_id UNDERFETCHING
  17. 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/<author_id> ) UNDERFETCHING
  18. 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/<author_id> ) 4. Problem N+1 i overfetching dla autorów. UNDERFETCHING
  19. 1. Wyświetl dashboard w aplikacji 2. GET example.com/users/42 3. GET

    example.com/users/42/books ZA DUŻO ZAPYTAŃ
  20. 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Ń
  21. 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Ń
  22. 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Ń
  23. 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Ń
  24. 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
  25. 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
  26. 1. Z serwera dostajemy dokumentację API (automatycznie wygenerowaną) 2. Odpytujemy

    o dane za pomocą zapytań (Query) CO ROBIMY W GRAPHQL?
  27. 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?
  28. DLACZEGO REST? 1. Publicznie dostępne API (REST łatwiej zabezpieczyć) 2.

    Stabilne API (w REST trudniej wprowadzać zmiany)
  29. 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)
  30. 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 :)
  31. DLACZEGO GRAPHQL? 1. Wewnętrzne API (mobilne i webowe apki chcą

    innych danych) 2. Prototypowanie i startupy (w GraphQL łatwiej wprowadzać zmiany)
  32. 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)
  33. 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)