Back to all

C# API Payments

Hola comunidad de Clip,

Estoy desarrollando una Minimal API en C# (.NET 6) que expone un endpoint /pagar. Al recibir una petición, esta API consume el servicio https://api.payclip.com/payments.

Mi implementación funciona parcialmente, pero tengo dudas sobre las buenas prácticas al manejar lo siguiente:

  • ¿Es correcto crear una nueva instancia de HttpClient en cada solicitud dentro del handler, o debería inyectarlo vía IHttpClientFactory?
  • ¿Cuál es la mejor manera de manejar la serialización del body JSON para asegurar que coincida exactamente con lo que la API externa espera?
  • ¿Hay forma de validar el esquema del body recibido por mi Minimal API antes de enviarlo (por ejemplo, usando FluentValidation)?

Agradecería recomendaciones sobre patrones adecuados para este tipo de escenario (por ejemplo, si conviene usar un servicio separado para encapsular la lógica del consumo de API externa).

Les paso mi servicio:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapPost("/pagar", async (HttpContext context) =>
{
    var paymentRequest = await context.Request.ReadFromJsonAsync<PaymentRequest>();

    if (paymentRequest == null)
        return Results.BadRequest("Invalid payment request");

    using var httpClient = new HttpClient();

    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "clave-hash");
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    var json = JsonSerializer.Serialize(paymentRequest);
    var content = new StringContent(json, Encoding.UTF8, "application/json");

    var response = await httpClient.PostAsync("https://api.payclip.com/payments", content);

    var responseContent = await response.Content.ReadAsStringAsync();

    return Results.Content(responseContent, "application/json");
});

¡Gracias de antemano!