|
Após termos criado uma API Serverless no tutorial Como construir sua primeira API na nuvem com o Serverless Framework, e termos incluído uma chave de autorização de API e variáveis para facilitar a manutenção do código, vamos conectá-la ao banco de dados DynamoDB, um banco NoSQL e totalmente gerenciado pela AWS. Nele, criaremos uma tabela para armazenar contatos, onde cada registro terá um nome, um número de telefone e um id.
Primeiramente, devemos criar a tabela. No arquivo serverless.yml adicionaremos a seção de resources, onde especificaremos uma definição YAML do CloudFormation para criar a tabela no DynamoDB.
Nas variáveis personalizadas do serverless.yml, adicione a variável para referenciar o nome da tabela.
No fim do seu arquivo serverless.yml, adicione o seguinte trecho:
Pela configuração definida, nossa referência à tabela no serverless.yml é ContactTable. Especificamos nesse trecho que a chave utilizada na tabela será id, que o método de cobrança será para pagar apenas pelos requests realizados e que o nome da tabela será dynamo-
POST – Persistindo novos itens na tabela
Para começar, vamos criar um novo arquivo para colocarmos nosso código, além disso podemos apagar o arquivo anterior src/item.py:
No novo arquivo, adicione o código abaixo:
O método get_dynamo_db recupera a tabela do DynamoDB através do boto3, o SDK da AWS para python. Iremos utilizá-la também para os demais métodos. Note que usamos a variável de ambiente TABLE, para referenciar o nome da tabela dos diferentes ambientes, teremos de adicioná-la na definição da função no serverless.yml.
Já o método create recebe o conteúdo que vem no body da requisição, verifica se possui name e phone informados, então gera um id único para esse registro e o persiste na tabela.
Chegou a hora de voltarmos ao serverless.yml para definirmos as especificações da nossa nova função. Para isso, apague a referência da função hello, e então adicione a função contact-post, referenciada abaixo.
Repare no que mudou além do nome da função. O valor de handler agora está vinculado ao novo arquivo src/contact.py, referenciando o método create que definimos.
Temos também a definição de environment, e nele passamos o nome da tabela para a variável ambiente TABLE, que utilizamos para enviar informação do serverless.yml para o código.
Também note na seção de events, a mudança no path, que está como contact e o method post.
Por fim, adicionamos iamRoleStatements para dar permissão à nossa função Lambda para que adicione novos itens (dynamodb:PutItem) na ContactTable.
Para que o trecho iamRoleStatements funcione, devemos adicionar um plugin ao nosso script. Em seu terminal, instale o pacote serverless-iam-roles-per-function pelo npm.
E adicione no fim do serverless.yml, a referencia para o plugin.
Agora é só realizar o deploy e testar o novo método. Vamos adicionar dois novos contatos!
Ao acessarmos o serviço do DynamoDB pelo console, na tabela dynamo-dev-contact-table, selecionando a aba de Itens, podemos verificar os dois registros persistidos na tabela.
GET e DELETE – Listando e removendo itens existentes na tabela
Legal! Já conseguimos incluir novos itens a nossa tabela. Vamos agora implementar os métodos GET e DELETE para que a nossa API retorne os registros existentes que já vimos no console, e que também possamos remover alguns deles.
Em contact.py, inclua ambas as funções:
E em serverless.yml faça a referência à função. Ela vai ser bem parecida à que acabamos de fazer, as únicas diferenças vão ser, o nome da função, o handler que apontará para os métodos que definimos, o tipo do método e a permissão de ação no DynamoDB que será de dynamodb:Scan para o método GET e dynamodb:DeleteItem para o método DELETE
Com essas simples adições, temos agora outros dois métodos funcionais em nossa API. Basta realizar o deploy mais uma vez. Vamos para os testes.
Primeiro, vamos listar os usuários com o método GET:
Obtemos um JSON como retorno, ele está formatado para facilitar a visualização:
Conseguimos ver os mesmos registros que vimos anteriormente na tabela no console. Agora vamos remover o contato do James Matthew. Para isso, basta passar o valor do id (29a64dab-b77a-4b5f-9e82-222950c3b5ff) na chamada do método DELETE.
Quando executar essa requisição, deverá receber uma resposta com status 200, confirmando a exclusão.
Ao realizar a requisição GET novamente, podemos verificar que o contato de James Matthew não se encontra mais presente em nossa tabela.
E assim finalizamos nossas três funções da API, que nos permitem manipular informações de uma tabela de contatos. Realize algumas chamadas diferentes para testar a aplicação! E digo mais, se quiser passar outras informações além do nome e do telefone do contato, sinta-se à vontade para fazê-lo. Como o DynamoDB é um banco NoSQL de esquema não definido, poderíamos colocar por exemplo um email também vinculado ao usuário e aumentar o poder de representação desta entidade!
Para baixar o código deste tutorial, acesse este link.
- Como construir sua primeira API na nuvem com o Serverless Framework - 11 de junho de 2020
- Como adicionar uma chave de autorização de API com o Serverless Framework - 4 de junho de 2020
- Como usar Variáveis com o Serverless Framework - 28 de maio de 2020
Entre em Contato
Para entender melhor como funciona o Serverless Framework e utilizá-lo seguindo as melhores práticas, entre em contato com nossos especialistas.