Graphql Workshop - 2020

Graphql

  • je silně typový jazyk
  • zajišťuje definici schématu
  • určuje pravidla 
  • graphl je pouze definice standardu

Graphql na serveru

  • http://apollographql.com/
  • co je na tom důležité
    • schéma
    • architektura
      • resolvery - něco jako router (ale modelu)
      • dataSources
    • queries​
      • queries
      • mutace - 
      • subscriptions (zatím nepotřebujeme)

Schéma

  • specifický jazyk 
  • https://graphql.org/
  • co hlavního obsahuje
    • typy - základním typem je Query a Mutation
    • inputy - jsou vstupní paramtry Queries a Mutations
    • skaláry - základní datové typy (Int, Float, String) možno ale definovat vlastní typy
    • direktivy

Architektura - resolvery

  • resolvery je prakticky propojení mezi schématem a mezi datovými zdroji
  • teoreticky nepotřebuji nic jiného než schéma a resolver ale pro větší API je třeba mít vrstvu data sources
  • neřeší business logiku - fungují prakticky pouze jako definice logiky resolvování

parent

argumenty 

kontext

+ graphql query info (😜 objekt)

Architektura - data sources

  • definice odkud se berou data
  • typicky to můžou být
    • http klienti
    • navázáni na databázi
    • v našem případě - orchestrace ostatních services

Plusy

  • na modeluji si rovnou modely a jejich vztahy (uživatel má přátele což jsou další uživatelé a ti mohou mít další přátele) - šetříme requesty - jsme rychlejší
  • chytré cachování - dokáži rozhodovat o cachování per typ
  • mnohem jednodušší implementace frontendu (nemusím handlovat stav) 
  • nemusím psát dokumentaci - dokumentace vychází z implementace 🥰
  •  

Mínusy

  • potřebuji vyřešit situaci kdy potřebuju získat v child něco z parenta (při resolve produkt kolekce potřebuji vyřešit že potřebuji vědět něco o kampani)
  • stupid way - prostě si to předám až dolů

Caching

N+1 problem

  • jak řešit situaci
  • v klasické databázi prostě použijeme join, zde při naivní implementaci voláme získání autora per každá kniha (duplicitní volání pro autory který napsal více knih)
  • Data loader, načtení kompletního  
  • https://www.youtube.com/watch?v=uCbFMZYQbxE&t=30s

Graphql

By Radim Štěpaník

Graphql

  • 49
Loading comments...

More from Radim Štěpaník