Refit
[Code
]
Hola de nuevo. Hoy vengo a presentaros un Nuget que me recomendó mi compañero @Vilches y que desde ese momento he usado para las llamadas rest a third parties o en api gateways.
Refit es un nuget que nos permite convertir nuestra Api Rest en un contrato (interface).
Con esto, Refit lo que nos proporciona es no tener que implementar las lógicas de las llamadas, centralizándolas en un contrato; configurando el servicio y la instancia del HttpClientFactory en el registro de dependencias de .Net Core.
El ejemplo:
public interface IGitHubApi
{
[Get("/users/{user}")]
Task<User> GetUser(string user);
}
private static void RegisterServices(IServiceCollection services)
{
services.AddRefitClient<IGitHubApi>()
.ConfigureHttpClient(c =>
{
c.BaseAddress = new Uri(_configuration["GitHubApiUrl"]);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}
)
.SetHandlerLifetime(Timeout.InfiniteTimeSpan)
.AddPolicyHandler(GetRetryPolicy());
}
private static IAsyncPolicy<HttpResponseMessage> GetRetryPolicy()
{
const int httpMaxRetires = 3;
return HttpPolicyExtensions
.HandleTransientHttpError()
.WaitAndRetryAsync(httpMaxRetires, SleepDurationProvider);
}
¡¡Y ya!! Con esto ya podemos empezar a consumir el servicio de Github pasándole como parámetro el usuario.
Además, como vemos se integra con Polly para política de reintentos, Newtonsoft para las deserializaciones, se puede configurar un Handling para las excepciones, herencia, headers, uploads, authorization, etc…
Simple, fácil, bueno y completito, ¿no?
Un saludo.