Skip to content

Latest commit

 

History

History
211 lines (177 loc) · 5.85 KB

README.md

File metadata and controls

211 lines (177 loc) · 5.85 KB

Multithreading

Neste desafio você terá que usar o que aprendemos com Multithreading e APIs para buscar o resultado mais rápido entre duas APIs distintas.

As duas requisições serão feitas simultaneamente para as seguintes APIs:

  • https://brasilapi.com.br/api/cep/v1/ + cep

  • http://viacep.com.br/ws/ + cep + /json/

Os requisitos para este desafio são:

  • Acatar a API que entregar a resposta mais rápida e descartar a resposta mais lenta.

  • O resultado da request deverá ser exibido no command line com os dados do endereço, bem como qual API a enviou.

  • Limitar o tempo de resposta em 1 segundo. Caso contrário, o erro de timeout deve ser exibido.

arquivos

  • brasilapi.200.json - resposta status 200 da brasilapi
{
  "cep": "39408078",
  "state": "MG",
  "city": "Montes Claros",
  "neighborhood": "Ibituruna",
  "street": "Avenida Herlindo Silveira",
  "service": "open-cep"
}
  • brasilapi.400.json - resposta status 400 da brasilapi - cep com quantidade de dígitos diferente de 8
{
    "message": "CEP deve conter exatamente 8 caracteres.",
    "type": "validation_error",
    "name": "CepPromiseError",
    "errors": [
        {
            "message": "CEP informado possui mais do que 8 caracteres.",
            "service": "cep_validation"
        }
    ]
}
  • brasilapi.404.json - resposta status 404 da brasilapi - cep não encontrado
{
    "message": "Todos os serviços de CEP retornaram erro.",
    "type": "service_error",
    "name": "CepPromiseError",
    "errors": [
        {
            "name": "ServiceError",
            "message": "A autenticacao de null falhou!",
            "service": "correios"
        },
        {
            "name": "ServiceError",
            "message": "Erro ao se conectar com o serviço ViaCEP.",
            "service": "viacep"
        },
        {
            "name": "ServiceError",
            "message": "Erro ao se conectar com o serviço WideNet.",
            "service": "widenet"
        },
        {
            "name": "ServiceError",
            "message": "CEP não encontrado na base dos Correios.",
            "service": "correios-alt"
        }
    ]
}
  • viacep.200.json - resposta status 200 da viacep
{
  "cep": "39408-078",
  "logradouro": "Avenida Herlindo Silveira",
  "complemento": "até 499/500",
  "unidade": "",
  "bairro": "Ibituruna",
  "localidade": "Montes Claros",
  "uf": "MG",
  "estado": "Minas Gerais",
  "regiao": "Sudeste",
  "ibge": "3143302",
  "gia": "",
  "ddd": "38",
  "siafi": "4865"
}
  • viacep.200.erro.json - resposta da viacep para cep não encontrado
{
    "erro": "true"
}
  • viacep.400.html - resposta status 400 da viacep - cep com quantidade de dígitos diferente de 8
<!DOCTYPE HTML>
<html lang="pt-br">

<head>
  <title>ViaCEP 400</title>
  <meta charset="utf-8" />
  <style type="text/css">
      h1 {
          color: #555;
          text-align: center;
          font-size: 4em;
      }
      h2, h3 {
          color: #666;
          text-align: center;
          font-size: 3em;
      }
      h3 {
          font-size: 1.5em;
      }
  </style>
</head>

<body>
    <h1>Http 400</h1>
    <h3>Verifique a URL</h3>
    <h3>{Bad Request}</h3>
</body>

</html>
  • saida.txt - cópia da saída do terminal para várias execuções da rotina na versão antiga
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go
2024/10/09 09:37:59 Usage: go run main.go <cep>
exit status 1
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 3940807</>
2024/10/09 09:38:12 Return from ViaCep
2024/10/09 09:38:12 cep must have 8 digits
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 394080788
2024/10/09 09:38:17 Return from Brasilapi
2024/10/09 09:38:17 cep must have 8 digits
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 39408079
2024/10/09 09:38:25 Return from Brasilapi
2024/10/09 09:38:25 not found
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 39408078
2024/10/09 09:38:30 Return from Brasilapi
2024/10/09 09:38:30 {"cep":"39408078","state":"MG","city":"Montes
Claros","neighborhood":"Ibituruna","street":"Avenida Herlindo Silveira","service":"open-cep"}
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 39408078
2024/10/09 09:52:53 Return from ViaCep
2024/10/09 09:52:53 {
 "cep": "39408-078",
 "logradouro": "Avenida Herlindo Silveira",
 "complemento": "até 499/500",
 "unidade": "",
 "bairro": "Ibituruna",
 "localidade": "Montes Claros",
 "uf": "MG",
 "estado": "Minas Gerais",
 "regiao": "Sudeste",
 "ibge": "3143302",
 "gia": "",
 "ddd": "38",
 "siafi": "4865"
}
antonio@DG15:~/DEV/full-cycle/multithreading$ go run main.go 39408078
^C2024/10/09 09:47:26 canceling query

nova versão

  • clean architecture

  • tests

  • padronização de saída

  • saída de tela da nova versão

$ make newversion
go run cmd/main.go -cep 39408078
{"time":"2024-10-28T11:51:08.103415713-03:00","level":"INFO","msg":"ExecuteQueries: Context deadline exceeded"}
{"time":"2024-10-28T11:51:08.134042302-03:00","level":"INFO","msg":"Brasilapi: canceled context"}
{"time":"2024-10-28T11:51:08.214412032-03:00","level":"INFO","msg":"Viacep: canceled context"}

$ make newversion
go run cmd/main.go -cep 39408078
{"time":"2024-10-28T11:51:18.111387716-03:00","level":"INFO","msg":"Return from Brasilapi","cep":{"cep":"39408078","state":"MG","city":"Montes Claros","neighborhood":"Ibituruna","street":"Avenida Herlindo Silveira"}}
{"time":"2024-10-28T11:51:18.821722504-03:00","level":"INFO","msg":"Viacep: canceled context"}

$ make newversion
go run cmd/main.go -cep 39408078
{"time":"2024-10-28T11:51:35.623727625-03:00","level":"INFO","msg":"Return from Viacep","cep":{"cep":"39408-078","state":"MG","city":"Montes Claros","neighborhood":"Ibituruna","street":"Avenida Herlindo Silveira"}}
{"time":"2024-10-28T11:51:35.696273638-03:00","level":"INFO","msg":"Brasilapi: canceled context"}