1
resposta

Faça como eu fiz: a importância das classes

Essa seria a forma simples, apenas requisitando os dados da API e obtendo uma resposta baseada em todo o retorno presente no .json por meio de uma string.

Console.Clear();

var apiKey = Private.key;

Console.Write("Digite o email que você deseja buscar: ");
string emailBuscado = Console.ReadLine()!;

using (HttpClient client = new()) {
    try {
        var request = await client.GetStringAsync($"https://apilayer.net/api/check?access_key={apiKey}&email={emailBuscado}");
        Console.WriteLine(request);
    }
    catch (Exception ex) {
        Console.WriteLine("Ocorreu um erro ao realizar uma requisição para a API.");
        Console.WriteLine($"Erro: {ex.Message}");
    }
}

Agora, caso queiramos usar esse programa para validar o formato de um email digitado, também podemos. Todavia, para isso, devemos usar o método GetFromJsonAsync<Usuario>, utilizando uma classe interna Usuario para armazenamento de dados específicos:

Usuario.cs

class Usuario {

    public string? email {get;set;}
    public bool format_valid {get;set;}
    public double score {get;set;}
}

Program.cs

using System.Net.Http.Json;

Console.Clear();

var apiKey = Private.key;

Console.Write("Digite o email que você deseja buscar: ");
string emailBuscado = Console.ReadLine()!;

using (HttpClient client = new()) {
    try {
        Console.Clear();
        var request = await client.GetFromJsonAsync<Usuario>($"https://apilayer.net/api/check?access_key={apiKey}&email={emailBuscado}");
        if (request!.format_valid == true) Console.WriteLine($"{request!.email} é válido e tem a pontuação: {request.score}.");
        else Console.WriteLine($"{request!.email} é inválido.");
    }
    catch (Exception ex) {
        Console.WriteLine("Ocorreu um erro ao realizar uma requisição para a API.");
        Console.WriteLine($"Erro: {ex.Message}");
    }
}
1 resposta

Oi, Diego! Como vai?

Gostei bastante da forma como você comparou duas abordagens: primeiro usando GetStringAsync() para visualizar o JSON completo e depois com GetFromJsonAsync<Usuario>() para trabalhar com dados específicos de modo mais organizado. Isso mostra muito bem a importância das classes na leitura de respostas de API, deixando o código mais claro e fácil de manter.

Uma dica interessante para o futuro é usar IsSuccessStatusCode antes de tratar o conteúdo da resposta, porque isso ajuda a validar se a requisição realmente deu certo antes de seguir com a leitura. Veja este exemplo:


using System.Net.Http.Json;

var resposta = await client.GetAsync("https://apilayer.net/api/check?access_key=chave&email=teste@email.com");

if (resposta.IsSuccessStatusCode)
{
    var usuario = await resposta.Content.ReadFromJsonAsync<Usuario>();
    Console.WriteLine(usuario?.email);
}

Nesse código, GetAsync() faz a requisição, IsSuccessStatusCode confirma se a resposta foi bem-sucedida e ReadFromJsonAsync<Usuario>() converte o JSON para objeto.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!