GraphQL.cz/Články/GraphQL a SQL databáze

Jak implementovat složené dotazy pomocí GraphQL a SQL: Praktický návod pro efektivní dotazování

Získejte komplexní výsledky ze SQL databází pomocí složených dotazů v GraphQL. Tento praktický návod vás provede krok za krokem.

541 slov
5.4 minut čtení
13. 8. 2020
Tomáš Dvořák

Úvod do světa GraphQL a SQL

Pokud se zajímáte o moderní webový vývoj, pravděpodobně jste už slyšeli o GraphQL. Je to revoluční technologie, která umožňuje snadnou a efektivní komunikaci mezi klientem a serverem. A co když vám řeknu, že můžete využít tuto skvělou technologii k tomu, abyste maximalizovali možnosti vašich SQL databází? Ano, správně slyšíte! V tomto článku se zaměříme na to, jak implementovat složené dotazy pomocí GraphQL a SQL, a naučíme se, jak dosáhnout komplexních výsledků bez zbytečné námahy.

Co je GraphQL?

GraphQL je dotazovací jazyk pro API, který byl vyvinut společností Facebook. Jeho hlavní výhodou je schopnost vyžadovat pouze ty data, která skutečně potřebujete. Na rozdíl od tradičních REST API, kde můžete dostat více dat, než potřebujete (což vede k zbytečným přenosům), GraphQL vám dává moc nad tím, co chcete. S jeho pomocí můžete vytvářet složené dotazy, které kombinují více zdrojů dat do jednoho přehledného výsledku. Takže pokud pracujete s SQL databázemi, máte možnost kombinovat více tabulek a získat tak ucelený pohled na data.

Proč používat složené dotazy?

Složené dotazy jsou klíčem k efektivnímu využití databází. Umožňují vám spojit data z různých tabulek a jejich kombinací získat cenné informace. Představte si například e-shop, kde potřebujete získat nejen informace o produktech, ale také o zákaznících a objednávkách. Složené dotazy vám umožní všechny tyto informace spojit do jednoho dotazu a vrátit tak komplexní data.

Základní pojmy: Typy a pole

Než se pustíme do samotného implementování složených dotazů v GraphQL, je dobré si objasnit základní pojmy jako jsou typy a pole. V GraphQL definujeme typy, které reprezentují strukturu našich dat. Například můžeme mít typ Product, který obsahuje pole jako id, name, price atd.

type Product \{
  id: ID!
  name: String!
  price: Float!
\}

Takto definovaný typ pak můžeme použít v našich dotazech.

Jak nastavit GraphQL server?

Předtím než začneme s implementací složených dotazů, je potřeba nastavit GraphQL server. Můžete použít různé knihovny jako Apollo Server nebo Express-GraphQL. V tomto příkladu použijeme Apollo Server.

const \{ ApolloServer \} = require('apollo-server');
const typeDefs = `
type Query \{
  products: [Product]
\}`;
const resolvers = \{
  Query: \{
    products: () =\> \{
      // Zde budeme volat naši SQL databázi.
    \}
  \}
\};
const server = new ApolloServer(\{ typeDefs, resolvers \});
server.listen().then((\{ url \}) =\> \{
  console.log(`🚀 Server ready at $\{url\}`);
\});

Připojení k SQL databázi

Abychom mohli pracovat s daty uloženými v SQL databázi, potřebujeme vytvořit připojení k databázi pomocí některého ORM jako Sequelize nebo TypeORM. Jakmile máme připojení nastaveno, můžeme začít načítat data.

const \{ Sequelize \} = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', \{
host: 'localhost',
dialect: 'mysql', // nebo jiný dialekt podle vaší databáze
\});

Implementace složených dotazů v GraphQL

Teď přichází ta nejzajímavější část! Jak vytvořit složené dotazy? Představme si scénář, kdy chceme získat produkty spolu s informacemi o jejich kategoriích a dodavatelích. Nejprve musíme definovat další typy pro kategorie a dodavatele:

type Category \{
id: ID!
name: String!
\}
type Supplier \{
id: ID!
name: String!
\}
type Product \{
id: ID!
name: String!
price: Float!
categories: [Category]!
supplier: Supplier!
\}

Nyní můžeme aktualizovat naši resolvery tak, aby vrátili potřebná data:

const resolvers = \{
  Query: \{
    products: async () =\> \{
      const products = await Product.findAll(\{
eagerLoad: ['categories', 'supplier'] // předpokládáme existenci těchto vztahů \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\
31615 přečtení článku
201 lajků
13. 8. 2020
Tomáš Dvořák
  • GraphQL

  • SQL

  • složené dotazy

  • databáze

  • API

  • typy

  • pole

  • Apollo Server

  • Sequelize

  • efektivní dotazování

O autorovi

Tomáš Dvořák

Senior vývojář s 12 lety praxe, specializuje se na GraphQL a Node.js. Vystudoval FIT ČVUT v Praze a pracoval pro několik významných startupů. Je autorem populární knihy "GraphQL v praxi" a pravidelně přednáší na technologických konferencích. Ve volném čase přispívá do open-source projektů a mentoruje junior vývojáře.

Dotazy k článku