Importância de um retorno adequado para erros de sua aplicação

Como desenvolvedor sempre presei por ter e disponibilizar o máximo de informação tanto em logs ou em retornos de API's, isto é essencial para um bom rastreamento de erros no futuro.

Vou compartilhar uma experiência que tive essa semana com um erro, e alertar o quanto é importante você como desenvolvedor tratar bem suas validações e retornar para o usuário uma mensagem que faca sentido, algo que deixe claro o que a pessoa deva fazer para resolver o erro.

Pois bem! na empresa que trabalho usamos o S3 da AWS para salvar arquivos, usamos o SDK disponibilizado. Uma coisa que sempre fiz nessa situação é inserir meta dados nos arquivos antes de fazer o upload para o S3, porém essa semana começamos a receber alerta de erro no momento de upload.

O erro S3 Exception: Error uploading file: The request signature we calculated does not match the signature you provided. Check your key and signing method, a primeira vista me parece uma boa resposta, longa e descritiva, certo? Então como um bom desenvolver foi ao velho amigo google pesquisar sobre o erro, dai veio a surpresa; varias pessoas com o mesmo retorno, porém as causas do erro eram diversas.

Algumas das causas reportadas foram:

  • Chave do objeto começando com ponto, exemplo ..\image\name.jpg
  • Chave do objeto com espaços
  • Credenciais erradas
  • Alguns problemas de encode

A lista era grande, então fui eliminando alguns, até que encontrei um comentário em um dos fóruns onde a pessoa reportou que no seu caso o erro foi causado por caracteres inválidos nos meta dados, lembrei que dos meus meta dados e fui verificar.

Resumo da história, depois de várias horas tentando achar a causa do erro, descobri que os meta dados aceita apenas caracteres US-ASCII, e um dos meus meta era o nome da pessoa que fez o upload, que no caso poderia conter, ç é ã, etc. E como o usuário utilizado nos testes não tinha nenhum deste, o problema não era detectado. Mas isso poderia ter sido evitado se o desenvolvedor da AWS tivesse um retornado uma mensagem adequada para tal erro.