GitHub oznámil GraphQL API v4 a komunita šílí. Je GraphQL skutečně nástupce REST, nebo je to jen hype? Po třech měsících vývoje s GraphQL sdílíme naše poznatky.
Problém s REST¶
Over-fetching a under-fetching. Endpoint /users/123 vrátí 30 polí, ale mobilní klient potřebuje jen jméno a avatar. Nebo potřebujete uživatele s objednávkami — dva requesty místo jednoho.
Náš pilot: e-commerce katalog¶
query {
product(id: "abc123") {
name
price
category { name }
reviews(first: 5) {
rating
author { name }
}
}
}
Jeden request, přesně ta data co potřebujete. V REST by to byly 3 endpointy.
Výhody¶
- Méně endpointů — jeden /graphql endpoint
- Silné typování — schema je kontrakt
- Introspection — auto-generované docs
- Evoluce bez verzování — přidáváte pole, stará query fungují
Problémy¶
N+1 queries. Řešení: DataLoader pattern. Caching. GraphQL jde přes POST, HTTP cache nefunguje. Monitoring. Jeden endpoint — musíte parsovat query.
Kdy REST, kdy GraphQL¶
GraphQL: více klientů s různými potřebami, komplexní datové modely, mobilní aplikace. REST: jednoduché CRUD, file uploads, webhooky, server-to-server komunikace.
GraphQL je mocný nástroj, ne stříbrná kulka¶
Nenahrazujte REST všude — používejte GraphQL tam, kde jeho výhody převáží náklady na adopci.