- 01 - Expor serviço de consulta de CEP
- 02 - Questão teórica
- 🖊️ Autor
O projeto consiste em um serviço de consulta de CEP, onde o usuário informa o CEP e obtem informações como rua, cidade e estado.
A linguagem escolhida para o desenvolvimento do projeto foi o JavaScript, mais especificamente o Node.js. A escolha se deu por ser uma linguagem que tenho mais familiaridade e por ser uma linguagem que permite a tipagem de dados, o que facilita a manutenção do código. Além disso, o Node.js é uma plataforma que permite a criação de aplicações web com JavaScript, o que permite a criação de aplicações web com uma única linguagem, além de ser uma plataforma que permite a criação de aplicações escaláveis.
A arquitetura do projeto é baseada nos conceitos de DDD (Domain Driven Design), SOLID e Clean Architecture. A escolha se deu por ser uma arquitetura que permite a criação de aplicações escaláveis, de fácil manutenção e que permite a criação de testes automatizados. Além disso, a arquitetura permite a criação de aplicações com baixo acoplamento e alta coesão.
O projeto foi hospedado na plataforma Render, que permite o deploy de aplicações de forma simples e rápida. Para acessar o projeto, acesse os links:
⚠️ A API está hospedada em um plano gratuito, portanto, pode demorar a responder na primeira requisição.
A documentação da API foi feita utilizando o Swagger, que é uma ferramenta que permite a criação de documentações para APIs de forma simples e rápida. Para acessar a documentação, acesse o link:
- Node.js - Interpretador de JavaScript para o backend
- Express - Framework para criação de aplicações web com Node.js
- TypeScript - Superset de JavaScript que permite a tipagem de dados
- Vitest - Ferramenta de teste para aplicações JavaScript
- Zod - Biblioteca para validação de dados
- Docker - Plataforma para criação de ambientes isolados
- Prisma - ORM para Node.js e TypeScript
- JWT - Geração e validação de tokens de autenticação
- Postman - Ferramenta para testar APIs
Método | Rota | Descrição | Autenticação |
---|---|---|---|
POST 📤 | /authenticate | Autenticação do usuário | 🔓 Público |
GET 📥 | /check | Health check | 🔓 Público |
GET 📥 | /cep/:cep | Consulta de CEP | 🔒 Privado |
Para executar o projeto é necessário ter instalado o Node.js e o Docker.
# Clone o repositório
$ git clone
# Acesse a pasta do projeto
$ cd desafio-tecnico-luizalabs
# Acesse a pasta do serviço
$ cd service
# Execute o comando do docker para criar o container
$ docker-compose up -d
Depois de executar o comando, será criado um container com o banco de dados e outro com a API. Para verificar se os containers foram criados, execute o seguinte comando:
# Verifique se os containers foram criados
$ docker ps
Pronto, o servidor está pronto para ser utilizado no endereço http://localhost:3333.
# Acesse a pasta da aplicação web
$ cd web
# Execute o comando do docker para criar o container
$ docker-compose up -d
Pronto, a aplicação web está pronta para ser utilizada no endereço http://localhost:3000.
# Inicie o banco de dados
$ docker-compose up -d
# Instale as dependências
$ npm install
# Execute as migrations
$ npm run prisma:migrate
# Esse comando irá criar as tabelas e popular o banco de dados com os dados do arquivo ./service/prisma/seed.ts
# Inicie o servidor
$ npm run dev
Pronto, o servidor está rodando em http://localhost:3333 ou na porta que você definiu no arquivo .env.
⚠️ Lembrando que para executar os testes, é necessário instalar as dependências do projeto. Para isso, execute o comando npm install na pasta do projeto.
Para executar os testes unitários, execute o seguinte comando:
# Execute os testes unitários
$ npm run test
caso queira executar os testes com o coverage, execute o seguinte comando:
# Execute os testes unitários com o coverage
$ npm run test:coverage
Para executar os testes e2e, execute o seguinte comando:
# Execute os testes e2e
$ npm run test:e2e
Quando você digita a URL de um site (http://www.netshoes.com.br) no browser e pressiona enter, explique da forma que preferir, o que ocorre nesse processo do protocolo HTTP entre o Client e o Server?
Ao acessar o site, o navegador faz uma requisição para o servidor utilizando o protocolo HTTP, mais precisamente o método GET. O servidor recebe a requisição e retorna o status 307 Internal Redirect, que indica que o recurso solicitado está temporariamente em um local diferente, e nos headers da resposta, no header Location, retorna a nova URL do recurso.
HTTP/1.1 307 Internal Redirect
Location: https://www.netshoes.com.br
Essa URL utiliza o protocolo HTTPS, que é uma versão mais segura do HTTP. O navegador então faz uma nova requisição para o servidor utilizando a nova URL e o servidor retorna o status 200 OK, que indica que a requisição foi bem sucedida, e retorna o html da página.
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
O navegador então interpreta o html e faz novas requisições para o servidor para obter os arquivos necessários para renderizar a página, como imagens, arquivos css e arquivos javascript.
E por fim, o navegador renderiza a página e exibe para o usuário.