Skip to content

Genbaico/UrlWeb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 

Repository files navigation

🔗 Reconhecedor de URLs com AFD (WebUrl)

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.


📌 Objetivo e Descrição

Criar um AFD que reconheça URLs válidas seguindo o padrão:

protocolo://www.SLD.TLD/path?args

✔️ Exemplos válidos para AFD:

https://google.com
http://site.com
https://www.ufrgs.br
https://google.com/maps
https://google.com/maps?q=sao+paulo

❌ Exemplos inválidos para AFD:

http//
https:site
://google.com

🚀 Como executar o projeto

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.

📋 Pré-requisitos

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


🔧 Implementação

Frontend + Backend

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.

Backend (Node.js)

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


🔌 Testando a API

Para testar as rotas da API, recomenda-se o uso de:

  • Thunder Client (extensão do VS Code)
  • Postman, caso ja tenha facilidade

POST /validate-structure

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"
}

POST /validate

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
}

🛠️ Construído com

  • 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

👨‍💻 Autores

  • 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.


💡 Possíveis melhorias futuras

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors