Encante seus clientes com inteligência artificial e machine learning
Vivemos em meio a era digital, e o uso de algumas ferramentas têm crescido exponencialmente. Segundo a AWS, cerca ...
Como criar uma Api Rest Utilizando Somente piGateway e DynamoDb
Trazemos no artigo de hoje feito pelo especialista Rafael Campana um pouco sobre questões técnicas que diversos especialistas enfrentam constantemente dentro do seu ambiente de trabalho, nós da BRLink estamos sempre atentos em trazer os melhores métodos e práticas dentro da área de Cloud Computing.
A abordagem comum do desenvolvimento de software é usar uma função intermediária para manipular os dados entre a API e o banco de dados, a maneira serverless para se conseguir isso no mundo da AWS é usar uma função lambda para fazer esse trabalho da seguinte forma:
Em muitos casos essa função é apenas usada como proxy para o banco de dados, porém já cogitou remover esse código que não possui utilidade e manter tudo mais simples e clean?
Este é um cenário considerado relativamente “bom”, você pode ter aqui um contêiner ou até mesmo um aplicativo implantado em um EC2, consumindo muitos recursos para nada.
Com um ApiGateway usando Mapping Templates você pode criar uma API restfull, com quase zero linhas de código e entregar uma boa solução em um tempo recorde com menor custo. O esquema de infraestrutura você pode ver abaixo:
Após essa breve elucidação, vamos praticar?
1- Criar uma tabela do DynamoDB
Para este exemplo, foi criado uma tabela muito simples apenas com id, name e userName. Não vamos entrar no detalhe de como criar essa tabela para não fugir do foco , mas você pode ver as etapas acessando: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SampleData.CreateTables.html
2- Criar uma Role no IAM
Sua função deve ter acesso à sua tabela no Dynamo, para este exemplo foi liberado full access para o Dynamo, pois em um mundo real é uma boa prática criar um acesso granular para cada API, tabela e método
*Policies atreladas à Role
3- Crie seu Api Gateway
Crie um Api Gateway com a seguinte estrutura:
No método post, você deve selecionar AWS Service e apontar o banco de dados do Dynamo e indicar sua role criada na etapa anterior:
Uma vez criado, você deve criar um mapping template para converter um conteúdo do body da solicitação do post em uma solicitação PutItem do DynamoDb, Integration Request > Mapping Templates, adicionar novo item com o contente type application /json com o seguinte conteúdo:
{
“TableName”: “users”,
“Item”: {
“uid”: {
“S”: “$context.requestId”
},
“name”: {
“S”: “$input.path(‘$.name’)”
},
“userName”: {
“S”: “$input.path(‘$.userName’)”
}
}
O que esse código significa? Ele mapeia as propriedades nome e username do corpo do método post para as propriedades “name” e “userName” do DynamoDb. O uid é preenchido com um requestId exclusivo gerado pelo request do API gateway.
Após essas configurações, vamos fazer nosso primeiro teste e analisar a resposta:
Como você pode ver, a chamada restante é convertida em uma chamada de PutItem para o Dynamo e a resposta é 200, o item foi criado e você pode verificar no console do db do Dynamo.
4- Criar um Recurso e Obter o Método
Crie um Resource com o path {username} e um método get associado à ele. Configure o método Get quase como ao Post , mas alterando o “PutItem” para “Query”, uma vez que a ação agora necessária é que faça uma query no Dynamo:
Agora precisamos criar novamente os Mapping Templates no Integration Request, mas agora com a seguinte tradução:
{ “TableName”: “users”, “IndexName”: “userName-index”, “KeyConditionExpression”: “userName = :val”, “ExpressionAttributeValues”: { “:val”: { “S”: “$input.params(‘username’)” } }}
Isso mapeia o username do parametro do resource para uma query do dynamoDb com a condição “userName” e faz a consulta.
Agora, precisamos criar uma etapa adicional e criar um mapeamento do response, em Response Response> Mapping Templates, adicione um novo item com o tipo de conteúdo application / json com o seguinte conteúdo:
#set($inputRoot = $input.path(‘$’))
{
“users”: [
#foreach($elem in $inputRoot.Items) {
“uid”: “$elem.uid.S”,
“name”: “$elem.name.S”,
“userName”: “$elem.userName.S”
}#if($foreach.hasNext),#end
#end
]
}
Vamos testar e analisar o response:
Nós passamos o nome de usuário criado “rocampana“ que contém um array (com apenas um item) com todos os usuários com este username cadastrados no banco de dados.
E agora nós temos dois métodos:
post — users/
get — users/{username}
Essas são as respostas no estilo REST com código quase zero e uma infraestrutura limpa e mais barata possível.
Vivemos em meio a era digital, e o uso de algumas ferramentas têm crescido exponencialmente. Segundo a AWS, cerca ...
O uso de tecnologias é uma tendência crescente nas empresas. No entanto, isso provoca um aumento da emissão de ...
As informações e ativos digitais são a força vital das organizações. Neste contexto, o cenário digital está repleto de ...
Impulsionadas pela transformação digital, muitas empresas estão migrando seus serviços para a nuvem. Segundo dados do TI Inside, o ...
Para descobrir como nossos serviços auxiliam os seus negócios, entre em contato conosco.
Tem alguma dúvida?
LIGUE PRA NÓS!
BRLink | Copyright © Todos os direitos Reservados.
Olá!
Gostaria de receber uma ligação?