GraphQL API com JavaScript: tutorial passo a passo para Node.js

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

GraphQL API com JavaScript: tutorial passo a passo



GraphQL é uma linguagem de consulta para APIs que permite aos clientes solicitarem apenas os dados que realmente precisam. Ao contrário do REST, onde a estrutura da resposta é fixa, o GraphQL oferece flexibilidade e controle. Neste tutorial, criaremos uma API GraphQL simples em Node.js usando a popular biblioteca Apollo Server.



Você aprenderá a configurar o servidor, definir tipos de dados, escrever resolvers e executar consultas e mutações. Todos os exemplos de código podem ser executados localmente.



1. Configuração do ambiente e instalação das dependências



Antes de escrever o código, certifique-se de ter o Node.js instalado (versão 14 ou superior). Crie uma nova pasta para o projeto e inicialize o npm:



mkdir graphql-tutorialcd graphql-tutorialnpm init -y


Agora instale os pacotes necessários. As dependências principais são: express (framework web), @apollo/server (servidor GraphQL), graphql (núcleo do GraphQL) e cors (para requisições entre domínios).



npm install express @apollo/server graphql cors


Crie o arquivo index.js — ele conterá todo o código do servidor.



2. Criação do schema GraphQL e dos resolvers



O schema é a descrição dos tipos de dados e operações (consultas, mutações). Os resolvers são funções que retornam os dados para cada campo.



Vamos adicionar um modelo de dados simples — uma lista de livros. Cada livro possui id, title, author e year.



Abra o arquivo index.js e escreva o seguinte código:



const { ApolloServer } = require('@apollo/server');const { startStandaloneServer } = require('@apollo/server/standalone');const express = require('express');const cors = require('cors');

// Simulação de banco de dadoslet books = [ { id: '1', title: 'Guerra e Paz', author: 'Liev Tolstói', year: 1869 }, { id: '2', title: 'Crime e Castigo', author: 'Fiódor Dostoiévski', year: 1866 }, { id: '3', title: 'O Mestre e a Margarida', author: 'Mikhail Bulgákov', year: 1967 }];

// Definição do schema (Type Definitions)const typeDefs = `#graphql type Book { id: ID! title: String! author: String! year: Int }

type Query { books: [Book] book(id: ID!): Book }

type Mutation { addBook(title: String!, author: String!, year: Int): Book deleteBook(id: ID!): Book }`;

// Resolversconst resolvers = { Query: { books: () => books, book: (parent, args) => books.find(book => book.id === args.id) }, Mutation: { addBook: (parent, args) => { const newBook = { id: String(books.length + 1), title: args.title, author: args.author, year: args.year }; books.push(newBook); return newBook; }, deleteBook: (parent, args) => { const index = books.findIndex(book => book.id === args.id); if (index === -1) return null; const deletedBook = books.splice(index, 1)[0]; return deletedBook; } }};

// Inicialização do servidorasync function startServer() { const app = express(); app.use(cors());

const server = new ApolloServer({ typeDefs, resolvers, });

const { url } = await startStandaloneServer(server, { listen: { port: 4000 }, });

console.log(`Servidor GraphQL iniciado em ${url}`);}

startServer();


Vamos analisar o código:

  • typeDefs — define os tipos Book, Query (consultas) e Mutation (modificações).
  • resolvers — contém funções para cada campo. Para books retorna o array completo, para book — filtra por id.
  • startStandaloneServer — inicia o servidor na porta 4000.


3. Testando a API através do GraphQL Playground

Blogs

Book Recommendations