Git Product home page Git Product logo

address-api's Introduction

Serviço para consumo de endereços por CEP



Necessidade

Um serviço de busca de endereço que dado um CEP, busque os dados do endereço e retorne dados como rua, bairro, cidade e estado do CEP em questão.


Solução

A melhor solução para essa necessidade é uma API, que pode abstrair a regra de negócio da aplicação e ser disponibilizada de forma rápida para os consumidores. Devido a natureza da aplicação (API que faz requisições assíncronas para outras API’s), dentre as tecnologias Java e NodeJS a que melhor se adequa para essa solução é NodeJS, que devido a sua arquitetura single threaded e non-blocking IO tem melhor desempenho para operações assíncronas e consegue processar um número maior de requisições com maior eficiência no consumo de recursos. Além disso, possui uma biblioteca desenvolvida por um brasileiro chamada cep-promise, que consulta diversos provedores de endereço simultaneamente e retorna a primeira requisição que retornar, garantindo sempre um bom tempo de resposta.


Arquitetura

Como se trata de uma aplicação pouco complexa, a melhor arquitetura a se seguir é um serviço único com express, que disponibiliza um servidor sem muitas recursos adicionais que seriam inutilizadas e também de fácil implementação para API’s REST. Ao gerar o deploy, a aplicação pode ser enviada para serviço de cluster Kubernetes em nuvem, onde podem ser configurados o autoscaling, load balancer entre outras ferramentas para otimizar a perfomance e estabilidade do serviço.


Padrões

A estrutura do projeto é a padrão utilizada em API’s REST com NodeJS, com controllers, services e rotas separados em pastas dentro do diretório src, e sendo configurados na aplicação por meio de uma classe principal. Somente no service temos a camada de regras de negócio com a chamada para a lib cep-promise por meio de um método recursivo que implementa a regra de negócio de adição de números 0 à direita para os casos onde o CEP não é encontrado.


Cenários da requisição pelo endereço

  1. CEP Encontrado com o valor enviado na requisição: O caso mais simples e comum, aqui o cliente envia exatamente o valor do CEP e ele é encontrado em uma das bases do cep-promise, retornando todos os dados para o cliente (cep, estado, cidade, bairro, rua e o serviço que disponibilizou os dados).

  1. CEP encontrado após a inclusão de n números zeros à direita do inicial: Nesse cenário, a API não encontra o CEP informado de primeira, e continua substituindo o último dígito válido do CEP pelo número zero até que o CEP seja encontrado.

  1. CEP não encontrado mesmo com substituições pelo número zero: Nesse cenário, mesmo com a substituição de outros algarismos à direita pelo número zero o CEP não é encontrado. Nesse caso, a API retorna um status code 404 para o cliente, informando que o CEP não foi encontrado.

Execução da aplicação

Para executar a aplicação é necessário ter em sua máquina:

  • NodeJS 14.11.0 (Testado)
  • Um gerenciador de pacotes do NodeJS (NPM/YARN)

Após instalar essas dependências, siga o passo a passo abaixo:


  • Clone o repositório com o comando git clone https://github.com/thiscosta/address-api.git

  • Instale as dependências do projeto utilizando o comando npm install ou yarn, de acordo com seu gerenciador de pacotes

  • Crie um arquivo na raíz do projeto chamado .env para a configuração das variáveis de ambiente. **Existe um arquivo .env.example na raíz com todos os valores que foram utilizados durante o desenvolvimento, recomendo que não altere a variável “PORT” pois o swagger foi configurado com ela.

  • Após criado o arquivo .env, basta executar o script dev do package.json, usando “npm run dev” ou “yarn dev”.

  • O projeto será executado e ficará disponível na porta definida no arquivo .env (3000)



Para visualizar o swagger da aplicação, acesse http://localhost:<porta do .env>/api-docs

Autor

Thiago Costa
Desenvolvedor de Software
Linkedin

address-api's People

Contributors

thiscosta avatar

Stargazers

 avatar Thales Zago avatar Carlos Henrique avatar  avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.