Foro
C# API Payments
18 days ago by anonymus
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 delhandler
, o debería inyectarlo víaIHttpClientFactory
? - ¿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!