
OData C# (Cómo Funciona para Desarrolladores)
El Protocolo de Datos Abiertos (OData) simplifica la creación y consumo de APIs RESTful en el desarrollo de Microsoft .NET. Ofrece un enfoque estandarizado para consultar y manipular datos a través de operaciones CRUD familiares (Crear, Leer, Actualizar, Eliminar). Este artículo explora cómo el Protocolo de Datos Abiertos simplifica el desarrollo de API en .NET, proporcionando ejemplos y destacando sus beneficios clave. Para explorar más sobre OData, puede consultar el Repositorio de OData C# en GitHub para el código fuente.

OData sigue prácticas estándar para crear APIs web RESTful, utilizando URLs y verbos HTTP como GET y POST para definir operaciones. Representa los datos utilizando un Modelo de Datos de Entidad (EDM) y JSON o AtomPub para la codificación de mensajes. Aunque OData simplifica el desarrollo de API en comparación con GraphQL, puede ofrecer menos características avanzadas.

Beneficios del uso de OData en .NET
- Estandarización: OData impone una forma consistente de definir modelos de datos de entidad, manejar solicitudes y formatear respuestas. Esto reduce la complejidad del desarrollo y simplifica la integración de aplicaciones cliente.
- Capacidades de consulta enriquecidas: OData admite una forma uniforme de consultar datos para realizar operaciones CRUD, filtrado ($filter), ordenamiento (orden ascendente/orden descendente)($orderby), y funciones de paginación ($top, $skip), permitiendo a los clientes recuperar conjuntos de datos específicos de manera eficiente.
- Experiencia de Desarrollo Mejorada: Las bibliotecas de .NET para OData simplifican el desarrollo de API. Los desarrolladores pueden aprovechar componentes preconstruidos para el enrutamiento, manejo de consultas, y serialización de datos, reduciendo la duplicación de código y el tiempo de desarrollo.
- Interoperabilidad: Los clientes compatibles con OData de varias plataformas pueden interactuar sin problemas con su servicio OData basado en .NET, promoviendo una integración de aplicaciones más amplia.
Cómo empezar con OData en .NET Framework
Las bibliotecas de .NET para OData mejoran la experiencia del desarrollador al facilitar formas eficientes de manipular conjuntos de datos. Simplifica la creación y consumo de APIs RESTful en el desarrollo de .NET. Ofrece un enfoque estandarizado para consultar y manipular datos a través de operaciones CRUD familiares (Crear, Leer, Actualizar, Eliminar).
Cómo configurar OData en proyectos .NET
Empiece por abrir su nuevo proyecto en Visual Studio. Luego, navegue al Explorador de Soluciones, haga clic derecho en su proyecto, y seleccione "Administrar Paquetes NuGet". Busque Microsoft.AspNetCore.OData e instálelo. La versión actual de OData es 8.2.5.
Para instalar OData en la Consola del Administrador de Paquetes de NuGet, use el siguiente comando.

Ejemplo: Creación de un servicio OData en ASP.NET Core
Vamos a crear una clase de modelo OData simple en una aplicación ASP.NET Core. En el siguiente código, la clase a continuación expondrá una lista de servicios que se pueden consultar usando la sintaxis OData.
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}Public Class Service
Public Property Id As Integer
Public Property FirstName As String
Public Property Price As Decimal
End ClassDescripción del código
La clase Service representa una estructura de datos básica en C# para gestionar un servicio. Incluye tres propiedades: Id: Un identificador entero para el servicio. FirstName: Una cadena que representa el primer nombre asociado con el servicio. Price: Un valor decimal que indica el precio del servicio. Esta clase se puede usar como base para crear funcionalidades relacionadas con servicios más complejas en el desarrollo .NET. También podemos usar propiedades de colección o de navegación basadas en el escenario.
Aquí se muestra cómo puede configurar un controlador OData en una aplicación ASP.NET Core en Visual Studio para exponer una lista de servicios a través de un punto final OData estandarizado. El siguiente ejemplo demuestra una implementación básica utilizando una lista estática de servicios y habilitando funcionalidades de consulta OData en Web API:
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}Imports DemoOData.Models
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.OData.Query
Imports Microsoft.AspNetCore.OData.Routing.Controllers
Namespace DemoOData.Controllers
<Route("odata/[controller]")>
Public Class ServiceController
Inherits ODataController
Private Shared ReadOnly Products As New List(Of Service) From {
New Service With {
.Id = 1,
.FirstName = "Laptop",
.Price = 6239.9D
},
New Service With {
.Id = 2,
.FirstName = "Smartphone",
.Price = 2585.9D
}
}
<HttpGet>
<EnableQuery>
Public Function [Get]() As IActionResult
Return Ok(Products)
End Function
End Class
End NamespaceDescripción del código
El código proporcionado define un ODataController llamado ServiceController en una aplicación ASP.NET Core, habilitando la consulta y manipulación de datos usando el protocolo OData. Redirige las solicitudes a odata/Service y sirve una lista estática de objetos Service, incluyendo una laptop y un smartphone. El método Get, decorado con [EnableQuery], permite a los clientes realizar consultas OData (filtrar, ordenar, paginar) en la lista de productos, devolviendo los resultados como un IActionResult para solicitudes HTTP GET.
Registrar servicios OData en el Program.cs
Para integrar OData en una aplicación .NET 6, necesitamos instalar y configurar los paquetes necesarios de OData. Esto implica definir el modelo OData, configurar el middleware OData, y configurar servicios para admitir características de OData como filtrado, ordenamiento y expansión.
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);Imports DemoOData.Models
Imports Microsoft.AspNetCore.OData
Imports Microsoft.OData.Edm
Imports Microsoft.OData.ModelBuilder
Private builder = WebApplication.CreateBuilder(args)
' Add services to the container.
builder.Services.AddControllers()
' Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer()
builder.Services.AddSwaggerGen()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static IEdmModel GetEdmModel()
'{
' ODataConventionModelBuilder builder = New ODataConventionModelBuilder();
' builder.EntitySet<Service>("Services");
' Return builder.GetEdmModel();
'}
builder.Services.AddControllers().AddOData(Function(options) options.AddRouteComponents("odata", GetEdmModel()).Select().Filter().OrderBy().SetMaxTop(20).Count().Expand())Descripción del código
Este código configura el soporte OData en una aplicación .NET 6. Primero, importa los espacios de nombres necesarios y crea una instancia de WebApplicationBuilder. El método GetEdmModel define el modelo OData usando ODataConventionModelBuilder, que especifica un conjunto de entidades para las entidades Service. El método AddOData se llama luego para configurar servicios OData, incluyendo la habilitación de selección, filtrado, ordenamiento, conteo, expansión y establecer un valor máximo top de 20 para los resultados de consulta. Esta configuración asegura que la aplicación pueda manejar consultas OData de manera efectiva.
El método AddOData() emplea el método GetEdmModel(), que recupera el modelo de datos utilizado para las consultas, formando la base de un servicio OData. Este servicio utiliza un modelo de datos abstracto conocido como Modelo de Datos de Entidad (EDM) para definir los datos expuestos. La clase ODataConventionModelBuilder genera un EDM a través de convenciones de nomenclatura predeterminadas, minimizando los requerimientos de código. Alternativamente, los desarrolladores pueden utilizar la clase ODataModelBuilder para tener mayor control sobre el EDM.
Captura de pantalla del código

Ejecución del servicio
Después de ejecutar el servicio, puede consultar el Servicio utilizando varias opciones de consulta OData, como:
https://localhost:7131/odata/Service
Resultado del programa

Introducción a IronPDF
IronPDF es una biblioteca completa de C# diseñada para simplificar la conversión de archivos a PDF, división de páginas PDF, y eliminación de páginas de PDF dentro de aplicaciones .NET. Ofrece una amplia gama de características, incluida la capacidad de generar PDFs desde HTML, CSS, imágenes y JavaScript, permitiendo a los desarrolladores transformar sin esfuerzo contenido web en documentos PDF de alta calidad. Con su API intuitiva y potente motor de renderización, IronPDF permite a los desarrolladores agilizar los procesos de generación de PDF, facilitando la integración de capacidades de generación de documentos dinámicos en sus aplicaciones con facilidad.

Añadir IronPDF al proyecto
Para instalar IronPDF en Visual Studio, navegue a la Consola del Administrador de Paquetes NuGet y use el siguiente comando.
Generación de PDF
Para generar un documento PDF a partir de contenido HTML en una aplicación .NET, podemos usar la clase ChromePdfRenderer de una biblioteca como DinkToPdf o similar. Este ejemplo demuestra cómo crear un PDF con detalles de un registro de Empleado.
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Employee(string FirstName, string LastName)
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim employee As New Employee("Iron", "Developer")
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>")
pdf.SaveAs("PersonRecord.pdf")
End Sub
End ClassEste ejemplo crea un simple registro de Empleado y luego usa IronPDF para generar un documento PDF que muestra el nombre de la persona. Demuestra cómo los records de C# pueden integrarse sin problemas con la generación de PDF en aplicaciones .NET.

Conclusión
OData simplifica el desarrollo y consumo de APIs RESTful en .NET al proporcionar capacidades estandarizadas de consulta y manipulación. También podemos integrarlo con Entity Framework, mejorando la eficiencia del desarrollo al simplificar el acceso y la gestión de datos. OData simplifica el desarrollo de API, permitiendo la integración y la interoperabilidad fluidas entre varias plataformas con sus ricas funcionalidades de consulta y mejorada experiencia de desarrollo. Además, IronPDF ofrece características exhaustivas y soporte para una manipulación robusta de PDF dentro de aplicaciones .NET.

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.
Artículos Relacionados


