Este projeto consiste no desenvolvimento de um Autômato Finito Determinístico (AFD) capaz de reconhecer URLs válidas, conforme uma estrutura pré-definida.
Além da implementação do AFD em Node.js, o projeto também conta com:
- 🌐 Interface visual desenvolvida em React
- 🔍 Validação adicional de DNS (IP e família) desenvolvida com Node.js
- ⚡ API para processamento das URLs
O objetivo é tornar a validação mais interativa, visual e próxima de um cenário real.
Criar um AFD que reconheça URLs válidas seguindo o padrão:
protocolo://www.SLD.TLD/path?args
https://google.com
http://site.com
https://www.ufrgs.br
https://google.com/maps
https://google.com/maps?q=sao+paulo
http//
https:site
://google.com
Essas instruções permitirão que você obtenha uma cópia do projeto em operação na sua máquina local para fins de desenvolvimento e teste. Consulte Implantação para saber como executar o projeto.
Antes de mais nada certifique que tenha o NODE baixado em sua maquina, portanto abra seu terminal e use do comando abaixo
node -v ou node --version
Além de verificar a versão do Node.js, confirme a instalação do NPM (gerenciador de pacotes) executando o comando
npm -v
Caso não tenha nenhuma dessas coisas baixadas, consulte o site NODE.JS e siga o passo a passo de sua instalação. Apos isso, baixe localmente os arquivos desse repositorio e siga os passos de implementação
Com todos os pré-requisitos baixados, navegue ate a o diretorio da pasta "frontend" usando um dos comandos abaixos
cd frontend
Estando na pasta correta, rode o seguinte comando para executar o a versão completa em web
npm run dev
Com isso sera gerado um link numa porta localhost para visualização do projeto na web.
OBS: Devido ao uso do "concurrently", o projeto foi configurado para subir tanto o frontend quanto o backend ao rodar os comandos acima, porem
caso queira rodar apenas o backend siga os comandos abaixo.
Caso queira rodar apenas o "backend" naveque ate o diretorio dessa pasta e rode um dos comandos
cd backend
Apos isso rode, o sequinte comando
node index.js
Com isso sera mostrado no terminal a porta localhost que foi designada para testes de rota de API
OBS: Caso esteja usando VScode para rodar esse projeto, recomendo o uso da extensão Thunder Client que facilita o uso de APIs tirando a necessidade de uso de algum aplicativo externo como Postman ou semelhantes
Para testar as rotas da API, recomenda-se o uso de:
- Thunder Client (extensão do VS Code)
- Postman, caso ja tenha facilidade
Essa rota valida apenas a construção do automato pela AFD, ou seja, aplica apenas o validaUrl.js
Corpo da requisição:
{ "url": "https://google.com" }
Exemplo de resposta:
{
"valid": true,
"historico": [
"i: 0, caractere: h, estado: 1",
"i: 1, caractere: t, estado: 1",
"i: 2, caractere: t, estado: 2",
"i: 3, caractere: p, estado: 3",
"i: 4, caractere: s, estado: 4",
"i: 5, caractere: :, estado: 5",
"i: 6, caractere: /, estado: 5",
"i: 7, caractere: /, estado: testDomain",
"i: 8, caractere: g, estado: SLD",
"i: 9, caractere: o, estado: SLD",
"i: 10, caractere: o, estado: SLD",
"i: 11, caractere: g, estado: SLD",
"i: 12, caractere: l, estado: SLD",
"i: 13, caractere: e, estado: SLD",
"i: 14, caractere: ., estado: TLD",
"domínio encontrado: com"
],
"message": "URL com estrutura válida"
}
Essa rota, mistura a validação do DNS e da estrutura feita pelo AFD, ou seja, esse é a rota que esta sendo usada no frontend e é a com todos os recursos de validação do backend
Corpo da requisição:
{ "url": "https://google.com" }
Exemplo de resposta:
{
"valid": true,
"historico": [
"i: 0, caractere: h, estado: 1",
"i: 1, caractere: t, estado: 1",
"i: 2, caractere: t, estado: 2",
"i: 3, caractere: p, estado: 3",
"i: 4, caractere: s, estado: 4",
"i: 5, caractere: :, estado: 5",
"i: 6, caractere: /, estado: 5",
"i: 7, caractere: /, estado: testDomain",
"i: 8, caractere: g, estado: SLD",
"i: 9, caractere: o, estado: SLD",
"i: 10, caractere: o, estado: SLD",
"i: 11, caractere: g, estado: SLD",
"i: 12, caractere: l, estado: SLD",
"i: 13, caractere: e, estado: SLD",
"i: 14, caractere: ., estado: TLD",
"domínio encontrado: com"
],
"message": "URL com estrutura válida pelo AFD e site (dominio) existe",
"Ip": "2800:3f0:4001:837::200e",
"familia": 6
}
- REACT - uma biblioteca front-end JavaScript de código aberto com foco em criar interfaces de usuário em páginas web
- NODE.JS - Node.js é um software de código aberto, multiplataforma, baseado no interpretador V8 do Google e que permite a execução de códigos JavaScript fora de um navegador web
- Genbaico - Construção do AFD + Backend - Genbaico
- RafaelRodrigues1003 - Construção do AFD + Frontend - RafaelRodrigues
Caso queira ver a lista de colaboradores colaboradores que participaram deste projeto.
- Suporte a subdomínios mais complexos (blog.;dev.;loja.)
- Validação de portas (ex: :8080)
- Melhoria na estrutura de forma geral
- Suporte a diferentes protocolos de redes alem de https e http
- Melhoria na logica de validação do Path da URL
- Melhoria na logica de validação do subdominio