¿Trabajas en proyectos que se desarrollan con .Net 5+ y necesitas hacer tu API REST mucho más robusto?
Te ayudamos a dar el primer paso para conseguirlo. Utiliza en tu proyecto las siguientes librerías de código abierto que puedes encontrar en el repositorio de NuGet.
1. SonarAnalyzer.CSharp
Esta librería te permitirá detectar errores, vulnerabilidades y code smells, a medida que escribes tu código C#. Aunque no tiene todo el poder de SonarQube, es una opción mas ligera y sus recomendaciones son muy útiles para mejorar la calidad de tu código.
2. Swashbuckle.AspNetCore
Swagger es una especificación (de lenguaje agnóstico) para describir un API REST que permite acceder y probar tus controladores sin necesidad de entrar directamente al código fuente. También es una herramienta indispensable para mejorar la comunicación entre los desarrolladores Frontend y Backend.
Esta librería es una de las dos implementaciones de Swagger (OpenAPI) que encontraras para .Net y se configura en la clase de arranque Startup.cs. A continuación te encontraras un ejemplo de esta configuración y también puedes consultar la documentación oficial de Microsoft.
// --------------------------- Swagger --------------------------- services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "Basic Taxonomy API", Description = "This is a simple example API", Contact = new OpenApiContact { Name = "Soluciones Modernas 10x", Email = "proyectos@10x.gt", Url = new Uri("https://10x.gt"), }, License = new OpenApiLicense { Name = "Use under Apache Licence 2.0", Url = new Uri("https://www.apache.org/licenses/LICENSE-2.0"), } }); // Set the comments path for the Swagger JSON and UI. var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); // JWT swagger config c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization Header (Bearer). Exemp: \"Authorization: Bearer {token}\"" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string> () } }); });
3. Serilog.AspNetCore
Serilog permite gestionar la bitácora de tu API de una manera fácil y flexible. Entre de las bondades que ofrece esta el poder configurar por medio del archivo appsettings.json la ruta de almacenamiento y el intervalo de rotación de la bitácora.
Para usar Serilog se debe agregar al Builder de la clase principal Program.cs de la siguiente manera:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog((context, services, configuration) => configuration .ReadFrom.Configuration(context.Configuration) .ReadFrom.Services(services) .Enrich.FromLogContext() .WriteTo.Console()) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
Para configurar Serilog se hace por medio de la sección WriteTo que debe colocarse en el appsettings.json. Esta es una configuración básica para colocar la bitácora en la dirección “./logs/log-.txt” y rotación del archivo cada mes.
"WriteTo": [ { "Name": "File", "Args": { "path": "./logs/log-.txt", "rollingInterval": "Month" } } ]
4. NodaTime
NodaTime es una alternativa mas precisa y confiable al API de tiempo de .NET y permite obtener la fecha/hora por medio de la zona horaria , lo que hace más exacto el resultado y quita la dependencia de la configuración del servidor.
Este es un ejemplo de como obtener la fecha con NodaTime:
public DateTime GetTime() { return Instant.FromDateTimeUtc(DateTime.UtcNow) .InZone( DateTimeZoneProviders.Tzdb["America/Guatemala"]) .ToDateTimeUnspecified(); }
Para más información sobre los problemas del API de tiempo de .NET visita: https://blog.nodatime.org/2011/08/what-wrong-with-datetime-anyway.html
¿Quieres ver estas librerías funcionando en un código fuente de ejemplo? Claro, ve a nuestro github
Esperamos que este artículo te haya proporcionado una visión útil sobre
el tema. Pero a veces puedes necesitar una mano experta. Si es así, no
dudes en contactarnos.
Nuestro equipo de expertos están listos para asistirte en tus proyectos y desafíos tecnológicos.