Domine inglês técnico de programação em 2025, seja qual for seu nível. Inscrição gratuita
GraphQL e REST com Node.js: qual escolher para suas APIs?
Rocketseat
Navegação Rápida:
Você já se perguntou qual arquitetura de API usar no seu projeto? REST ou GraphQL? Ambas têm suas vantagens e podem ser combinadas para atender às demandas mais específicas. Neste artigo, vamos explorar as diferenças, os casos de uso e como integrá-las em um mesmo projeto. Se você é novo em Node.js ou quer dominar o desenvolvimento de APIs, confira também nossos artigos relacionados:
REST: a fundação das APIs modernas
O que é REST?
REST é uma arquitetura de API baseada em HTTP. É simples, direta e segue princípios como:
- Recursos como URLs (e.g.,
/users
).
- Métodos HTTP:
GET
,POST
,PUT
,DELETE
.
- Stateless (sem estado): cada requisição é independente.
Desafios do REST
- Over-fetching: dados adicionais que não são necessários ao cliente podem ser enviados.
- Under-fetching: múltiplas requisições para obter informações relacionadas.
- Falta de flexibilidade: alterações no cliente podem exigir novos endpoints.
Exemplo com Node.js e Express
const express = require('express'); const app = express(); app.use(express.json()); app.get('/users', (req, res) => { res.json([{ id: 1, name: 'Diego' }, { id: 2, name: 'Mayk' }]); }); app.listen(3000, () => console.log('API REST rodando em http://localhost:3000'));
Para você que está começando a explorar o universo das APIs e quer entender conceitos fundamentais como API, REST e RESTful, convidamos você a assistir a um vídeo incrível do Mayk Brito. Nele, você vai aprender com exemplos práticos o que são esses conceitos e como aplicá-los no desenvolvimento de APIs.
GraphQL: a linguagem de consultas para APIs modernas
O que é GraphQL?
GraphQL é uma linguagem que permite ao cliente definir exatamente quais dados deseja receber, resolvendo problemas comuns do REST.
Principais conceitos:
- Schema: define a estrutura e os tipos de dados.
- Resolvers: funções que retornam os dados.
- Queries e mutations: consultas e alterações de dados.
Exemplo de queries e mutations:
Definição do Schema:
type Query { getUser(id: ID!): User getAllUsers: [User] } type Mutation { createUser(name: String!, email: String!): User } type User { id: ID name: String email: String }
Resolvers para Queries e Mutations:
const users = []; const resolvers = { Query: { getUser: (_, { id }) => users.find(user => user.id === id), getAllUsers: () => users, }, Mutation: { createUser: (_, { name, email }) => { const newUser = { id: users.length + 1, name, email }; users.push(newUser); return newUser; }, }, };
Testando as Queries e Mutations:
- Query para obter todos os usuários:
query { getAllUsers { id name email } }
- Mutation para criar um novo usuário:
mutation { createUser(name: "Mayk", email: "mayk@example.com") { id name email } }
Exemplo com Apollo Server
const { ApolloServer, gql } = require('apollo-server'); const typeDefs = gql` type Query { hello: String } `; const resolvers = { Query: { hello: () => 'Olá, GraphQL!', }, }; const server = new ApolloServer({ typeDefs, resolvers }); server.listen().then(({ url }) => console.log(`Server ready at ${url}`));
Se você ficou curioso sobre como construir APIs GraphQL utilizando Node.js, este vídeo é para você! Nele, você vai aprender desde os conceitos iniciais até a criação de dois aplicativos completos com GraphQL. É uma ótima oportunidade para entender como essa tecnologia pode transformar a forma como você consome e entrega dados.
REST + GraphQL: usando o melhor dos dois mundos
Nem sempre é necessário escolher entre REST e GraphQL. Muitas vezes, a integração de ambas é a solução ideal.
Por que combinar REST e GraphQL?
- Migração incremental: transforme APIs REST existentes em GraphQL gradualmente.
- Flexibilidade: use GraphQL como uma camada para consolidar diferentes APIs REST.
- Simplicidade: utilize REST para operações simples e GraphQL para consultas mais complexas.
Exemplo: Wrapping REST com GraphQL
Imagine que você tem uma API REST e quer expô-la como GraphQL. Aqui está como fazer isso com Apollo Server:
Definindo o Schema
type Query { user(id: ID!): User } type User { id: ID name: String email: String }
Resolver que faz requisição à API REST
const fetch = require('node-fetch'); const resolvers = { Query: { user: async (_, { id }) => { const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`); const data = await response.json(); return data; }, }, };
Configurando o Apollo Server
const { ApolloServer } = require('apollo-server'); const typeDefs = require('./schema'); const resolvers = require('./resolvers'); const server = new ApolloServer({ typeDefs, resolvers }); server.listen().then(({ url }) => console.log(`Server ready at ${url}`));
Essa abordagem permite reaproveitar APIs REST existentes e ainda aproveita a flexibilidade do GraphQL.
Quando usar REST ou GraphQL?
REST é ideal para:
- Aplicações simples.
- Operações CRUD diretas.
- APIs públicas amplamente documentadas.
GraphQL brilha em:
- Aplicações com requisitos dinâmicos de dados, como dashboards.
- Mobile apps, onde a otimização do uso de dados é essencial.
- Projetos que exigem interatividade ou tempo real.
Conclusão
Ao longo deste artigo, exploramos como REST e GraphQL podem ser usados para criar APIs robustas, eficientes e flexíveis. Aprendemos que cada tecnologia tem seus pontos fortes e que, em muitos casos, integrá-las pode ser a melhor escolha. Além disso, vimos como o Node.js, com suas diversas ferramentas, é uma plataforma ideal para implementar essas arquiteturas modernas.
Agora que você tem uma visão mais clara, que tal dar o próximo passo na sua jornada como desenvolvedor?
Domine as tecnologias que estão transformando o mercado!
Na formação Node.js da Rocketseat, você vai aprender na prática como construir arquiteturas modernas, eficientes e escaláveis, além de dominar tecnologias como Fastify, Prisma, NestJS, e muito mais! Confira o que espera por você:
- Mais de 72 horas de conteúdo gravado.
- +8 projetos profissionais para o seu portfólio.
- Certificado de Especialista em Node.js validado pelo mercado.
- Acompanhamento personalizado com tutorias individuais e em grupo.
- Networking e mentorias para impulsionar sua carreira dev.
Ministrada pelo Diego Fernandes, co-fundador e CTO da Rocketseat, a formação é voltada para quem deseja construir projetos reais e se destacar no mercado.
Está esperando o quê?
Explore os planos e condições da Formação Node.js e dê o próximo passo na sua carreira dev hoje mesmo. Tem dúvidas? Fale com nosso time para esclarecer tudo e começar sua jornada agora mesmo!