Athom 1.0.3

dotnet add package Athom --version 1.0.3
                    
NuGet\Install-Package Athom -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Athom" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Athom" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="Athom" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Athom --version 1.0.3
                    
#r "nuget: Athom, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Athom@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Athom&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=Athom&version=1.0.3
                    
Install as a Cake Tool

Nova Camada de Requisições HTTP

Esta documentação descreve a nova camada de abstração para requisições HTTP, projetada para ser flexível, robusta e alinhada com os princípios de SOLID e Clean Code. A arquitetura permite o desacoplamento total entre a lógica de negócio e os detalhes de infraestrutura, como o cliente HTTP e os métodos de autenticação.


Estrutura e Componentes

A solução é organizada em três camadas principais, com a seguinte estrutura de pastas:

  • Athom/Processamento/Requisicao: Contém os modelos de retorno que encapsulam o resultado de cada operação.
    • OperationStatus.cs: Um enum que define o estado semântico de uma operação (ex: Success, NotFound, ServerError).
    • RequestModel<T>.cs: A classe principal que encapsula o resultado da requisição, incluindo o status da operação, o código HTTP, a mensagem e o resultado tipado.
  • Athom/Servico: Camada de serviço que define os contratos (interfaces) e as implementações de funcionalidades de negócio e utilitários.
    • IHttpService.cs: A interface que define o contrato para o serviço de requisições.
    • IAuth.cs: Interface para a aplicação de autenticação.
    • IRequestBody.cs: Interface para a criação de diferentes tipos de corpo de requisição.
  • Athom/Infra/Http: Camada de infraestrutura que contém a implementação concreta do IHttpService.
    • HttpService.cs: A classe que utiliza HttpClient para executar as requisições e mapear os resultados para um RequestModel.

Funcionamento e Implementação

O fluxo de uso da nova camada é simples e direto, seguindo o padrão de Inversão de Dependência (DIP).

1. Configuração no Startup.cs ou Program.cs

Para que o sistema de injeção de dependência funcione corretamente, é necessário registrar o HttpClient e o HttpService na inicialização da sua aplicação.

public void ConfigureServices(IServiceCollection services)
{
    // Registra o HttpClient para o HttpService, garantindo um ciclo de vida adequado.
    services.AddHttpClient<IHttpService, HttpService>();

    // Registra o serviço para obter tokens OAuth2, se necessário.
    services.AddTransient<IOAuth2TokenService, ClientCredentialsTokenService>(provider =>
    {
        // Exemplo: valores de configuração obtidos de appsettings.json
        var httpClient = provider.GetRequiredService<HttpClient>();
        var tokenEndpoint = Configuration["OAuth:TokenEndpoint"];
        var clientId = Configuration["OAuth:ClientId"];
        var clientSecret = Configuration["OAuth:ClientSecret"];
        return new ClientCredentialsTokenService(httpClient, tokenEndpoint, clientId, clientSecret);
    });

    // Demais serviços...
}
2. Utilização em um Serviço de Domínio

Dentro de um serviço de negócio, injete a interface IHttpService e use o método SendAsync para executar as requisições. O serviço de negócio não precisa saber dos detalhes de implementação do HTTP.

public class UsuarioService : IUsuarioService
{
    private readonly IHttpService _httpService;

    public UsuarioService(IHttpService httpService)
    {
        _httpService = httpService;
    }

    public async Task<RequestModel<Usuario>> ObterUsuarioPorIdAsync(Guid usuarioId, string token)
    {
        // 1. Cria a autenticação.
        var auth = new BearerAuth(token);

        // 2. Chama o método genérico SendAsync do IHttpService.
        //    O IHttpService cuida de toda a complexidade da requisição.
        var result = await _httpService.SendAsync<Usuario>(
            method: HttpMethodType.Get,
            uri: $"https://api.exemplo.com/v1/usuarios/{usuarioId}",
            auth: auth);
        
        // 3. Verifica o status da operação e atua de acordo.
        if (result.IsSuccess)
        {
            Console.WriteLine($"Usuário encontrado: {result.Result.Nome}");
        }
        else if (result.IsNotFound)
        {
            Console.WriteLine($"Erro: Usuário não encontrado. Mensagem: {result.Message}");
        }
        else
        {
            Console.WriteLine($"Ocorreu um erro inesperado: {result.Message}");
            // Lançar exceção ou tratar o erro de outra forma, se necessário.
        }

        return result;
    }
}

Classes de Suporte Detalhadas

  • OperationStatus: Este enum é a espinha dorsal do nosso sistema de retorno. Em vez de códigos HTTP, ele fornece um estado semântico da operação.
  • RequestModel<T>: Representa o retorno da operação.
    • Métodos de Fábrica Estáticos: O RequestModel é imutável. Use os métodos de fábrica como RequestModel.Success(), RequestModel.NotFound(), etc., para criar instâncias.
    • Propriedades de Verificação: Propriedades como IsSuccess e IsNotFound facilitam a verificação do resultado da operação em estruturas de controle como if/else ou switch.
  • IAuth e Implementações: Define o contrato para a autenticação. A HttpService não precisa saber se é um token Bearer, Basic ou OAuth2; ela simplesmente chama o método Apply() para adicionar a autenticação.
  • IRequestBody e Implementações: Lida com a complexidade de serializar o corpo da requisição para diferentes formatos, como JSON ou multipart/form-data.
  • HttpService: A implementação que orquestra a requisição. Ela constrói a URL, aplica a autenticação e o corpo, envia a requisição e, o mais importante, mapeia o código de status HTTP da resposta para o nosso OperationStatus.
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.3 68 9/12/2025
1.0.2 153 9/4/2025
1.0.1 143 9/4/2025
1.0.0 192 8/28/2025