Esta aplicação foi desenvolvida para solucionar o problema do desafio para desenvolvedores.
A aplicação tem como principal objetivo buscar informações sobre domínios. Ao entrar com um domínio são buscadas as informações do mesmo usando a WhoAPI.
Os dados que já foram consultados são salvos como cache para que possam ser consultados com mais agilidade nas próximas consultas. Os registros de cache expiram em 10 dias, ou seja, 10 dias após consultar o domínio exemplo.com
o registro salvo no cache interno será ignorado a aplicação buscará novamente os dados atualizados da API.
-
Backend
- C#
- ASP.NET MVC
- ASP.NET Web API
-
Frontend
- JavaScript
- AngularJS
-
Banco de dados de caching
- MongoDB
Esta aplicação é uma Single Page Application construída com AngularJS que consome uma API escrita em C# usando ASP.NET WebAPI. A API contém dois endpoints.
-
api/buscar/{dominio}
:Busca informações sobre o domínio (enviado por parâmetro na URL, tanto inline quanto por query string.
Exemplo de requisição:
http://exemplo/api/buscar?dominio=umbler.com
ouhttp://exemplo/api/buscar/umbler.com/
(notar a barra no final). -
api/atualizarcache/{idRegistro}
:Busca as informações do domínio, ignorando o cache interno e atualizando o mesmo.
Exemplo de requisição:
http://exemplo/api/atualizarcache?idRegistro=59834f84dc85e94788428ec5
ouhttp://exemplo/api/buscar/59834f84dc85e94788428ec5
Para as duas solicitações a API vai retornar um JSON (ou um XML) com a mesma estrutura do JSON de exemplo abaixo.
{
"Dado": {
"Id": "59834f84dc85e94788428ec5",
"NomeDominio": "umbler.com",
"DataCriacao": "2013-06-03T23:42:15Z",
"DataExpiracao": "2027-06-03T23:42:15Z",
"DataAtualizacao": "2017-07-08T19:31:54Z",
"NameServers": [
"ns1.dominio.com",
"ns1.dominio.com"
],
"Emails":[
"[email protected]",
"[email protected]"
],
"RawInfo": "Uma string gigantesca com quebra de linhas ",
"Contatos":[
{
"Nome": "Alguém",
"Tipo": "admin",
"Organizacao": "ECMA Org",
"Fone": "+1 18 6552 4458",
"Email": "[email protected]",
"EnderecoCompleto": "Rua ECMA, 1080. NY, NY. USA."
}
],
"ExpiracaoCacheInterno": "2017-08-14T03:00:00Z",
"Registrado": true,
"CacheExpirado": false
},
"Cacheado": true
}
Para facilitar os testes, eu mesmo fiz uma publicação dela, usando minha conta de estudante no Azure. Ela pode ser acessada pelo link umbler-whoisapp.azurewebsites.net.
Observação: Como usei uma conta gratuita tanto para os servidor da aplicação quanto para o servidor do MongoDB, a aplicação pode apresentar algum delay. Principalmente no primeiro acesso.
Para rodar a aplicação são necessárias as seguintes ferramentas
- IIS (Internet Information Services)
- MongoDB
Compilar e realizar o deploy da aplicação com o Visual Studio.
Abra o arquivo .sln
com o Visual Studio, entre no menu Build
e clique na opção Rebuild
.
Abra o menu Build
novamente, clique em Publish DesafioWhois
.
Isso abrirá a janela de publicação.
-
Em "Select a publish target", clique em Custom e entre com um nome qualquer na janela que vai abrir;
-
Em Publish Method escolha a opção File System;
-
Em target location selecione o caminho onde os arquivos de publicação devem ser gerados;
-
Clique no botão Publish.
-
Abra o IIS e crie um novo Web Site;
-
Escolha um nome qualquer e em "Physical location" selecione o mesmo diretório que foi definido na publicação do Visual Studio;
Pra facilitar um pouco, gerei os arquivos necessários para publicação e coloquei numa pasta zipada. Esta pasta pode ser baixada aqui.
Para fazer esta publicação, extraia os arquivos em uma pasta qualquer, crie uma aplicação no IIS e em "Physical location" selecione o caminho onde estão os arquivos extraídos.
Após realizar a publicação da aplicação é necessário configurar os parâmetros usados para conexão ao MongoDB.
-
Abra o arquivo
web.config
e procure pela tagappKeys
; -
Procure pelos pares de chave-valor que contém chaves iniciadas com "Mongo" e altere conforme as configurações do seu servidor MongoDB;
<add key="MongoUrl" value="mongodb://localhost:27017" /> <add key="MongoDb" value="db" /> <add key="MongoCollection" value="dominios" />
Observação: O banco de dados (MongoDb
) e a collection (MongoCollection
) não precisam ser criados de antemão. Caso eles não existam, a aplicação se encarregará de criá-los.