refactor(clients): ♻📦 add Refit

This commit is contained in:
Collin M. Barrett 2020-09-13 16:39:30 -05:00
parent 2637e2e387
commit e0c6126a9e
6 changed files with 11 additions and 57 deletions

View file

@ -15,6 +15,7 @@ services:
image: ghcr.io/collinbarrett/filterlists-archival-api
restart: always
networks:
- reverse-proxy
- archival
depends_on:
- archival-scheduling-db

View file

@ -1,25 +0,0 @@
using System.Net.Http;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace FilterLists.SharedKernel.Apis.Clients
{
internal abstract class BaseApiClient
{
protected BaseApiClient(HttpClient httpClient)
{
Client = httpClient;
}
protected HttpClient Client { get; }
protected async Task<T> GetAsync<T>(string requestUri, CancellationToken cancellationToken = default)
{
var response = await Client.GetAsync(requestUri, cancellationToken);
response.EnsureSuccessStatusCode();
await using var responseStream = await response.Content.ReadAsStreamAsync();
return await JsonSerializer.DeserializeAsync<T>(responseStream, cancellationToken: cancellationToken);
}
}
}

View file

@ -1,5 +1,6 @@
using FilterLists.SharedKernel.Apis.Clients.Directory;
using System;
using Microsoft.Extensions.DependencyInjection;
using Refit;
namespace FilterLists.SharedKernel.Apis.Clients
{
@ -7,7 +8,8 @@ public static class ConfigurationExtensions
{
public static void AddApiClients(this IServiceCollection services)
{
services.AddHttpClient<IDirectoryApiClient, DirectoryApiApiClient>();
services.AddRefitClient<IDirectoryApiClient>()
.ConfigureHttpClient(c => c.BaseAddress = new Uri("http://directory-api/api"));
}
}
}

View file

@ -1,27 +0,0 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using FilterLists.SharedKernel.Apis.Contracts.Directory;
namespace FilterLists.SharedKernel.Apis.Clients.Directory
{
internal sealed class DirectoryApiApiClient : BaseApiClient, IDirectoryApiClient
{
public DirectoryApiApiClient(HttpClient httpClient, Uri directoryApiBaseUrl) : base(httpClient)
{
Client.BaseAddress = directoryApiBaseUrl;
}
public async Task<IEnumerable<ListVm>> GetListsAsync(CancellationToken cancellationToken = default)
{
return await GetAsync<IEnumerable<ListVm>>("/lists", cancellationToken);
}
public async Task<ListDetailsVm> GetListDetailsAsync(int id, CancellationToken cancellationToken = default)
{
return await GetAsync<ListDetailsVm>($"/lists/{id}", cancellationToken);
}
}
}

View file

@ -21,8 +21,7 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.8" />
<PackageReference Include="System.Text.Json" Version="4.7.2" />
<PackageReference Include="Refit.HttpClientFactory" Version="5.2.1" />
</ItemGroup>
<ItemGroup>

View file

@ -2,12 +2,16 @@
using System.Threading;
using System.Threading.Tasks;
using FilterLists.SharedKernel.Apis.Contracts.Directory;
using Refit;
namespace FilterLists.SharedKernel.Apis.Clients.Directory
namespace FilterLists.SharedKernel.Apis.Clients
{
public interface IDirectoryApiClient
{
[Get("/lists")]
Task<IEnumerable<ListVm>> GetListsAsync(CancellationToken cancellationToken = default);
[Get("/lists/{id}")]
Task<ListDetailsVm> GetListDetailsAsync(int id, CancellationToken cancellationToken = default);
}
}