API desenvolvida para compressão de imagens utilizando Node.js.
O projeto segue uma arquitetura em camadas para organizar as responsabilidades:
- src: Diretório raiz do código fonte.
- controller: Responsável por receber as requisições HTTP e enviar as respostas. O arquivo
image-compress-controller.tsgerencia o fluxo da compressão. - services: Contém a lógica de negócio. No arquivo
image-compress.ts, é realizado o processamento e a compressão da imagem utilizando a bibliotecasharp. - routes: Define as rotas da API. O arquivo
image-router.tsmapeia os endpoints para os controllers correspondentes.
As principais tecnologias utilizadas no projeto são:
- Node.js: Ambiente de execução Javascript.
- Express: Framework web para construção da API.
- Multer: Middleware para manipulação de dados
multipart/form-data, utilizado para o upload de arquivos. - Sharp: Biblioteca de alta performance para processamento de imagens (redimensionamento, compressão, etc).
- Cors: Middleware para habilitar o CORS (Cross-Origin Resource Sharing).
- Helmet: Middleware de segurança para aplicações Express.
- TypeScript: Superset do Javascript que adiciona tipagem estática.
- TSX: Executor de TypeScript baseado em esbuild (utilizado para desenvolvimento).
image-compress/
├── client/ # Exemplo mínimo de frontend para teste
├── node_modules/ # Dependências do projeto
├── src/
│ ├── controller/ # Controladores da API
│ ├── routes/ # Definição de rotas
│ └── services/ # Lógica de negócio (compressão)
├── .gitignore # Arquivos ignorados pelo Git
├── package.json # Manifesto do projeto e dependências
├── server.ts # Ponto de entrada da aplicação
└── tsconfig.json # Configuração do TypeScript
Nota sobre a pasta client: A pasta
clientcontém apenas um exemplo mínimo (index.html) para demonstrar o envio de imagens para a API. Para um uso real ou testes mais específicos, recomenda-se o desenvolvimento de um frontend dedicado e bem estruturado.
Siga os passos abaixo para clonar e executar o projeto em sua máquina local.
git clone https://github.com/herloncosta/image-upload-and-compress.git
cd image-upload-and-compressCertifique-se de ter o Node.js instalado. Execute o comando abaixo para instalar as dependências listadas no package.json:
npm installPara iniciar o servidor em modo de desenvolvimento (com hot-reload):
npm run devO servidor será iniciado em http://localhost:3000.
Endpoint de Compressão:
- URL:
http://localhost:3000/api/v1/compress - Método:
POST - Body:
multipart/form-data- Campo
image: Arquivo de imagem a ser comprimido.
- Campo
Você pode utilizar o arquivo client/index.html abrindo-o no navegador para testar o upload, ou utilizar ferramentas como Postman ou Insomnia envianndo uma requisição POST para o endpoint acima.