Socket
Book a DemoInstallSign in
Socket

github.com/antoniofmoliveira/fullcycle-multithreading

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/antoniofmoliveira/fullcycle-multithreading

v0.0.0-20241028145852-31ba03fd5859
Source
Go
Version published
Created
Source

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

FAQs

Package last updated on 28 Oct 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.