Apidog

All-in-one Collaborative API Development Platform

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Inscreva-se gratuitamente
Home / Tutoriais / GraphQL com Node.js e Express: Um Guia Abrangente

GraphQL com Node.js e Express: Um Guia Abrangente

Aprenda a criar APIs poderosas com GraphQL, Node.js e Express. Este guia abrangente cobre configuração, implementação e otimização. Perfeito para desenvolvedores que desejam construir APIs eficientes e escaláveis.

Você está pronto para revolucionar a maneira como constrói APIs? Se você está no mundo do desenvolvimento há um tempo, provavelmente já ouviu falar sobre GraphQL, Node.js e Express. Juntas, essas tecnologias criam um conjunto de ferramentas poderoso para construir APIs modernas e eficientes. Hoje, estamos mergulhando fundo no mundo do GraphQL com Node.js e Express para ajudá-lo a entender e implementar essa combinação em seus projetos.

Mas primeiro, deixe-me apresentar uma ferramenta que tornará o desenvolvimento da sua API ainda mais suave: Apidog. Apidog é uma ferramenta gratuita para teste e gerenciamento de APIs que se integra perfeitamente ao GraphQL, Node.js e Express. Se você quer otimizar o processo de desenvolvimento da sua API, baixe o Apidog gratuitamente e veja a diferença que ele faz!

Introdução ao GraphQL, Node.js e Express

O que é GraphQL?

GraphQL é uma linguagem de consulta para sua API e um runtime do lado do servidor para executar consultas usando um sistema de tipos que você define para seus dados. Desenvolvido pelo Facebook, oferece uma alternativa mais eficiente, poderosa e flexível ao REST. Com o GraphQL, você pode solicitar exatamente os dados que precisa, evitando a sobrecarga ou a subcarga de dados.

GRaphQL Official Website

O que é Node.js?

Node.js é um ambiente de execução JavaScript construído sobre o motor V8 do Chrome. Ele permite aos desenvolvedores construir aplicações de rede escaláveis usando JavaScript no lado do servidor. O Node.js é conhecido por seu modelo de I/O não bloqueante e orientado a eventos, que o torna leve e eficiente.

NodeJs official website

O que é Express?

Express é um framework mínimo e flexível para aplicações web em Node.js que fornece um conjunto robusto de recursos para desenvolver aplicações web e móveis. Ele facilita o desenvolvimento rápido de aplicações web baseadas em Node e é frequentemente usado como a espinha dorsal para construir APIs RESTful.

Express official Website

Configurando Seu Ambiente de Desenvolvimento

Antes de começarmos a construir nossa API, vamos configurar nosso ambiente de desenvolvimento. Aqui está o que você precisará:

  • Node.js e npm (Node Package Manager) instalados
  • Um editor de código (como Visual Studio Code)
  • Um terminal ou prompt de comando

Instalando Node.js e npm

Baixe e instale o Node.js a partir do site oficial Node.js. O npm vem embutido com o Node.js, então você não precisa instalá-lo separadamente.

Inicializando um Novo Projeto Node.js

Abra seu terminal e crie um novo diretório para seu projeto. Navegue até o diretório do seu projeto e execute o seguinte comando para inicializar um novo projeto Node.js:

npm init -y

Este comando criará um arquivo package.json no diretório do seu projeto.

Criando um Servidor Express Básico

Agora que nosso projeto está configurado, vamos criar um servidor Express básico.

Instalando o Express

Execute o seguinte comando para instalar o Express:

npm install express

Criando o Servidor

Crie um novo arquivo chamado server.js e adicione o seguinte código:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 4000;

app.get('/', (req, res) => {
  res.send('Olá Mundo!');
});

app.listen(PORT, () => {
  console.log(`O servidor está rodando na porta ${PORT}`);
});

Este código configura um servidor Express básico que escuta na porta 4000 e responde com "Olá Mundo!" quando acessado na URL raiz.

Para iniciar o servidor, execute:

node server.js

Visite http://localhost:4000 no seu navegador para ver a mensagem "Olá Mundo!".

Integrando GraphQL com Express

Com nosso servidor básico em funcionamento, é hora de integrar o GraphQL.

Instalando GraphQL e Apollo Server

Apollo Server é um servidor GraphQL de código aberto mantido pela comunidade que é compatível com qualquer cliente GraphQL. Usaremos para lidar com nossas solicitações GraphQL.

Instale o Apollo Server e o GraphQL:

npm install apollo-server-express graphql

Configurando o Apollo Server

Modifique server.js para configurar o Apollo Server com o Express:

const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
const app = express();
const PORT = process.env.PORT || 4000;

// Defina o esquema
const typeDefs = gql`
  type Query {
    hello: String
  }
`;

// Defina os resolvers
const resolvers = {
  Query: {
    hello: () => 'Olá Mundo!',
  },
};

// Crie uma instância do ApolloServer
const server = new ApolloServer({ typeDefs, resolvers });

// Aplique middleware para conectar ApolloServer com Express
server.applyMiddleware({ app });

app.listen(PORT, () => {
  console.log(`O servidor está rodando na porta ${PORT}${server.graphqlPath}`);
});

Este código configura um servidor Apollo básico com uma única consulta hello que retorna "Olá Mundo!".

Definindo Esquemas e Resolvers GraphQL

Agora que temos um servidor GraphQL básico em funcionamento, vamos mergulhar mais fundo em esquemas e resolvers.

O que é um Esquema?

Um esquema GraphQL define os tipos e relacionamentos em sua API. Ele descreve quais consultas podem ser feitas e quais dados podem ser recuperados.

O que são Resolvers?

Resolvers são funções que lidam com a recuperação dos dados para um campo específico em seu esquema. Eles dizem ao GraphQL como obter os dados para cada consulta.

Definindo Esquemas Mais Complexos

Expanda seus typeDefs e resolvers em server.js:

const typeDefs = gql`
  type Book {
    title: String
    author: String
  }

  type Query {
    books: [Book]
  }
`;

const books = [
  {
    title: 'A Despertar',
    author: 'Kate Chopin',
  },
  {
    title: 'Cidade de Vidro',
    author: 'Paul Auster',
  },
];

const resolvers = {
  Query: {
    books: () => books,
  },
};

Este esquema define um tipo Book e uma consulta books que retorna uma lista de livros.

Conectando a um Banco de Dados

Para uma aplicação do mundo real, você precisará conectar sua API a um banco de dados. Vamos usar o MongoDB para este exemplo.

Configurando o MongoDB

Inscreva-se para uma conta gratuita do MongoDB Atlas ou configure uma instância local do MongoDB. Em seguida, instale mongoose para interagir com o MongoDB a partir do Node.js:

npm install mongoose

Conectando ao MongoDB

Modifique server.js para conectar ao MongoDB:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/graphql', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'erro de conexão:'));
db.once('open', () => {
  console.log('Conectado ao MongoDB');
});

// Defina um esquema e modelo Mongoose
const bookSchema = new mongoose.Schema({
  title: String,
  author: String,
});

const Book = mongoose.model('Book', bookSchema);

// Modifique o resolver para buscar dados do MongoDB
const resolvers = {
  Query: {
    books: async () => await Book.find(),
  },
};

Agora, a consulta books busca dados do MongoDB.

Otimizando Sua API GraphQL

Para garantir que sua API GraphQL seja eficiente e performática, considere as seguintes técnicas de otimização:

DataLoader para Carga em Lote Eficiente

DataLoader é uma utilidade para carregar e armazenar em cache dados em lote. Ele ajuda a reduzir o número de solicitações ao banco de dados.

Instale o DataLoader:

npm install dataloader

Use o DataLoader em seus resolvers:

const DataLoader = require('dataloader');

const bookLoader = new DataLoader(async (keys) => {
  const books = await Book.find({ _id: { $in: keys } });
  return keys.map((key) => books.find((book) => book.id === key));
});

const resolvers = {
  Query: {
    books: async () => await bookLoader.loadAll(),
  },
};

Cache

Implemente estratégias de cache para evitar recuperação redundante de dados. Você pode usar caches em memória como o Redis para armazenar dados frequentemente solicitados.

Paginação

Para consultas que retornam grandes conjuntos de dados, implemente paginação para buscar dados em partes. Use os parâmetros limit e skip para paginar os resultados.

Testando Sua API com Apidog

Testar sua API é crucial para garantir que ela funcione como esperado. Apidog simplifica esse processo com sua interface intuitiva e recursos poderosos.

button

Passo 1: Abra o Apidog e crie uma nova solicitação.

Apidog

Passo 2: Encontre ou insira manualmente os detalhes da API para a solicitação POST que deseja fazer.

Apidog

Passo 3: Preencha os parâmetros necessários e qualquer dado que queira incluir no corpo da solicitação.

Apidog

Integrando o Apidog ao seu fluxo de trabalho, você pode economizar tempo e evitar armadilhas comuns no desenvolvimento de APIs. Além disso, é gratuito para baixar e usar!

Apidog com Seu GraphQL

Uma vez que você tenha o Apidog instalado, pode importar seu esquema GraphQL para gerenciar e testar sua API de forma mais eficiente. Navegue até a seção de importação no Apidog e faça o upload do seu arquivo schema.graphqls.

crie uma nova solicitação GraphQL

Digite sua consulta na caixa de Consulta na aba "Executar". Você também pode clicar no botão manual de Buscar Esquema na caixa de entrada para habilitar o recurso "completar código" para expressões de Consulta, auxiliando na entrada de declarações de Consulta.

Requisitando GraphQL

Com seu esquema importado, você pode usar o Apidog para testar suas consultas e mutações, gerar documentação e até mesmo simular respostas. Isso ajudará a garantir que sua API funcione como esperado e forneça um guia abrangente para os usuários da sua API.

Requisitando GraphQL

Use os recursos de teste automatizado do Apidog para executar seus casos de teste em um cronograma. Isso ajuda a detectar novos problemas precocemente e garante que sua API permaneça confiável.

Melhores Práticas para Construir APIs

Construir APIs robustas e escaláveis requer seguir as melhores práticas. Aqui estão algumas dicas principais:

Use Mensagens de Erro Descritivas

Assegure-se de que sua API retorne mensagens de erro significativas para ajudar os clientes a entender o que deu errado.

Proteja Sua API

Implemente mecanismos de autenticação e autorização para proteger sua API contra acesso não autorizado.

Documente Sua API

Forneça documentação clara e abrangente para sua API. Ferramentas como Swagger e GraphQL Playground podem ajudar a gerar documentação interativa.

Monitore o Desempenho

Use ferramentas de monitoramento para acompanhar o desempenho de sua API. Identifique e resolva gargalos de desempenho rapidamente.

Mantenha Seu Código Organizado

Siga uma estrutura de código consistente e convenções de nomenclatura para manter seu código limpo e fácil de manter.

Conclusão

Parabéns! Você aprendeu como construir uma poderosa API GraphQL com Node.js e Express. Cobrimos tudo, desde a configuração do seu ambiente de desenvolvimento até a definição de esquemas e resolvers, conectando a um banco de dados, otimizando sua API e testando-a com o Apidog.

Lembre-se, construir ótimas APIs é um processo contínuo. Refine continuamente suas habilidades, mantenha-se atualizado com os últimos desenvolvimentos no ecossistema GraphQL e continue experimentando novas ferramentas e técnicas.

button

Junte-se à Newsletter da Apidog

Inscreva-se para ficar atualizado e receber os últimos pontos de vista a qualquer momento.