Embora eu não seja o cara do backend, eu sempre tive muito contato com o desenvolvimento de APIs mesmo enquanto front, mas Lambdas foram algo que eu sempre ignorei.
Primeiro eu achava complicado, depois desnecessário porque eu achava mais fácil subir uma aplicação, até o dia que eu resolvi dar uma chance pro negócio e cara, vale a pena.
No youtube tem vídeo antigo falando sobre isso, mas se você é velho que nem eu e gosta de ler, vamo lá!
Ah, e pra esse exemplo eu vou criar uma lambda que busca os dados da Faker Api. É um exemplo básico, mas mais pra frente eu vou explicar alguns casos de uso reais onde ele pode ser útil.
Criando a lambda
A real é que você não precisa ser o bichão do backend pra trabalhar com lambdas. Criar uma é bem simples e pode ser criada direto do painel da AWS. Pra começar, acesse o painel das lambdas e clique em Create Function.
Ao criar, você pode usar um blueprint que já contém alguns exemplos como conectar ao DynamoDB ou ao S3, mas pro nosso caso nós vamos de Author from Scratch mesmo.
Dê um nome pra function, que eu vou chamar de faker-api
, e altere o campo architecture pra arm64 que tem um custo menor do que a x86. Você pode conferir o meu setup aqui:
Implementando a Faker Api
Function criada, agora vamos implementar o nosso código pra buscar os dados da faker api. Você deve substituir o código padrão do index.mjs por esse aqui:
import * as https from 'https';
function getData() {
const apiUrl = `https://fakerapi.it/api/v1/persons?_quantity=1&_gender=male&_birthday_start=2005-01-01`;
return new Promise((resolve, reject) => {
const req = https.get(apiUrl, {}, res => {
let rawData = '';
res.on('data', chunk => {
rawData += chunk;
});
res.on('end', () => {
try {
resolve(JSON.parse(rawData));
} catch (err) {
reject(new Error(err));
}
});
});
req.on('error', err => {
reject(new Error(err));
});
});
}
export const handler = async (body) => {
const res = await getData();
const response = {
statusCode: 200,
body: res,
};
return response;
};
Explicando o código acima:
Nós temos a arrow function handler
, que é responsável por executar a lambda. Dentro dela, eu tô chamando a função getData
que por sua vez faz uma requisição pra Faker Api utilizando a api https
do Node. Em seguida, faz o parser da response e retorna os dados.
A essa altura a sua lambda deve estar assim:
Clique em deploy para publicar 🙂
Criando uma URL pública
Por último, vá na aba Configuration, clique em Function url e Create function url.
Vamos deixar o Auth Type como NONE
e em Additional Settings, marque a caixa Configure cross-origin resource sharing (CORS). Depois, é só clicar em Save. Você vai ver uma URL criada similar a essa aqui:
Basta abrir o link no seu navegador que você vai conseguir ver os resultados. E com isso você tem um endpoint seu publicado pra utilizar no frontend. É só consumir com a função fetch
.
const getData = async () => {
fetch('https://dz4y7rvv2az4iopdqzvgneefhy0jdfif.lambda-url.us-east-1.on.aws')
.then((response) => response.json())
.then((data) => {
console.log('success: ', data)
})
.catch((error) => {
console.error('error: ', error);
});
};
Tá, agora vamos aos esclarecimentos
Você deve estar se perguntando: pra que diabos eu preciso de uma lambda pra chamar outra API pública se eu posso chamar ela diretamente? E a realidade é que você não precisa. Porém, existem alguns casos onde esse tipo básico de lambda vai te ajudar bastante:
Proxy de API
Nem sempre você vai querer que o frontend se conecte no seu endpoint ou possa manipular os resultados da pesquisa. No nosso exemplo, a lambda está filtrando os resultados da Faker Api pra sempre mostrar uma pessoa do gênero masculino nascida a partir de 01/01/2005, e o frontend (ou um usuário mal intencionado) não consegue mudar os filtros aplicados.
Em um caso de uso real, eu subi um servidor do Strapi e usei a lambda pra expor algumas collections sem expor a API inteira. Nesse caso, a minha lambda tinha a apiKey pra consultar o Strapi e só retornava o que era estritamente necessário pro frontend funcionar. Praticamente um BFF.
Mock
Se você precisar subir um serviço pra simular uma API que ainda não está construída, você pode usar essa mesma lambda retornando dados estáticos respeitando o contrato da API que ainda será feita. Em minutos você vai ter um endpoint pra trabalhar que vai estar acessível de qualquer lugar.
É isso! E aí, curtiu? Tem alguma dúvida? Se tiver qualquer coisa que eu possa fazer pra tornar esse artigo melhor, seja reclamar, elogiar ou sugerir outro artigo, manda ver nos comentários. Feedbacks são sempre super bem vindos.
Top comments (0)