Neste artigo, eu vai guiar-vos pelo processo de criação de uma API GraphQL sem servidor usando TypeScript, AWS Lambda, e Apollo Server.
Computação Sem Servidor
A computação sem servidor é um modelo de execução de computação em nuvem onde os fornecedores de nuvem gerenciam automaticamente a infraestrutura para executar aplicações. Neste modelo, os desenvolvedores escrevem código, e o fornecedor de nuvem cuida de executar, dimensionar e manter os servidores, o que significa que os desenvolvedores não precisam se preocupar com o gerenciamento de servidores, aprovisionamento de infraestrutura ou dimensionamento. O termo “sem servidor” não significa que não há servidores envolvidos, mas sim que as tarefas de gerenciamento de servidores são abstraídas dos desenvolvedores. AWS Lambda é um serviço de computação sem servidor fornecido pela Amazon Web Services (AWS) que permite executar código sem aprovisionar ou gerenciar servidores
GraphQL
GraphQL é uma linguagem de consulta para APIs e um tempo de execução para executar essas consultas. Permite que os clientes solicitem exatamente os dados que precisam, tornando-a mais eficiente do que o REST, que pode sobretaxar ou faltar a dados. Com GraphQL, os clientes especificam a forma e a estrutura da resposta, recuperando vários recursos em uma única solicitação. Esta flexibilidade melhora o desempenho e reduce a sobrecarga de rede. GraphQL é fortemente tipado, com um esquema definindo tipos disponíveis e operações. É amplamente usado em aplicações modernas para otimizar a comunicação entre o front-end e o back-end, permitindo um gerenciamento de dados mais responsivo e eficiente.
Apollo Server
É um popular servidor GraphQL de código aberto que ajuda os desenvolvedores a criar uma API GraphQL com facilidade. Ele simplifica o processo de construção de um robusto e escalável API GraphQL, lidando com a definição de esquema, execução de consultas e formatação de respostas. O Apollo Server suporta recursos como busca de dados, cache e autenticação, tornando-se altamente adaptável para aplicações modernas. Funciona de forma transparente com várias fontes de dados, incluindo APIs REST, bancos de dados e microserviços. Com ferramentas integradas para monitoramento de desempenho e tratamento de erros, o Apollo Server é comumente usado para agilizar o desenvolvimento de backend, fornecendo uma comunicação eficiente e flexível entre clientes e servidores em ambientes GraphQL.
Por que TypeScript?
É um superconjunto do JavaScript que adiciona tipagem estática à linguagem. Ajuda a capturar erros durante o desenvolvimento, melhora a leitura do código e aprimora a refatoração. Fornecendo segurança de tipo e suporte à ferramentas, o TypeScript permite aplicações mais manutenveis e escaláveis, tornando-se ideal para projetos grandes ou equipes.
Tudo o que você precisa saber sobre GraphQL e o futuro da API
- Uso otimizado de recursos: A precisão na busca de dados de GraphQL se encaixa perfeitamente com o modelo de pago por uso de recursos do serverless, garantindo otimizar o uso de recursos.
- Backend simplificado: As funções serverless podem processar resolvers GraphQL eficientemente, simplificando a arquitetura de backend.
- Melhoria no desempenho: A capacidade de GraphQL de reduzir a sobrecarga de dados resulta em aplicações mais rápidas, especialmente quando combinadas com arquiteturas serverless.
- Escalabilidade: ambas as tecnologias são exímias em lidar com cargas variáveis, tornando a combinação altamente escalável.
- Econômico em custo: O modelo de pagamento conforme uso do computação sem servidor, juntamente com a transferência eficiente de dados de GraphQL, pode resultar em significativos economias de custo.
“A combinação de computação sem servidor e GraphQL permite o rápido desenvolvimento de APIs escaláveis e eficientes. É uma dupla poderosa que pode reduzir significativamente o tempo de desenvolvimento e os custos operacionais.” – Nader Dabit, “Full Stack Serverless“
Abaixo está o guia passo a passo para deployar um serviço com GraphQL no AWS Lambda.
- Passo 1: Inicialize um novo projeto TypeScript e instale as dependências.
mkdir serverless-graphql-api
cd serverless-graphql-api
npm init -y
npm install typescript @types/node --save-dev
npx tsc --init
npm install apollo-server-lambda graphql @types/aws-lambda
npm install --save-dev serverless-offline
- Passo 2: Defina o esquema GraphQL com os elementos necessários.
import { gql } from 'apollo-server-lambda';
export const typeDefs = gql`
type Query {
auto: String
}
type Mutation {
sayAuto(name: String!): String
}
`;
- Passo 3: Implementando resolvers:
export const resolvers = {
Query: {
auto: () => 'Hello from serverless GraphQL!',
},
Mutation: {
sayAuto: (_: any, { name }: { name: string }) => `Hello, ${name}!`,
},
};
- Passo 4: Criando o manipulador Lambda:
import { ApolloServer } from 'apollo-server-lambda';
import { typeDefs } from './schema';
import { resolvers } from './resolvers';
const server = new ApolloServer({
typeDefs,
resolvers,
});
export const graphqlHandler = server.createHandler();
- Passo 5: Configurar o deploy serverless. Crie um arquivo
serverless.yml
:
service: serverless-graphql-api provider: name: aws runtime: nodejs16.x stage: dev region: us-east-1 functions: graphql: handler: handler.graphqlHandler events: - http: path: graphql method: post - http: path: graphql method: get plugins: - serverless-offline
Você pode escrever o código diretamente no Lambda na AWS (Quick Hello World) e usar opções de implantação adequadas como CDK ou Terraform. Como tanto o computação sem servidor quanto o GraphQL continuam a evoluir, podemos esperar ainda mais ferramentas e práticas poderosas surgirem.
Conclusão
Ao abraçar o GraphQL sem servidor, os desenvolvedores podem criar APIs que escalam com muita facilidade e entregam exatamente o que os clientes precisam. É como ter um cristal que sempre sabe exatamente quais dados buscar e escalar.
Source:
https://dzone.com/articles/serverless-computing-and-graphql