Saltar al pie de página
.NET AYUDA

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 C# (Cómo Funciona para Desarrolladores): Figura 1 - OData C#- Protocolo de acceso a datos

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.

OData C# (Cómo Funciona para Desarrolladores): Figura 2 - OData

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 Ricas: OData admite una forma uniforme de consultar datos para realizar operaciones CRUD, filtrado ($filter), ordenamiento (Orden Ascendente/Orden Descendente)($orderby), y funcionalidades 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.

Install-Package Microsoft.AspNetCore.OData

OData C# (Cómo Funciona para Desarrolladores): Figura 3 - Instalar OData

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 int Id { get; set; } 
    public string FirstName { get; set; }
    public decimal Price { get; set; }
}
$vbLabelText   $csharpLabel

Descripción del código

La clase Service representa una estructura de datos básica en C# para la gestión de un servicio. Incluye tres propiedades: Id : Un identificador entero del servicio. FirstName : Una cadena que representa el nombre asociado al servicio. Price: Un valor decimal que indica el precio del servicio. Esta clase puede utilizarse como elemento fundamental para crear funcionalidades más complejas relacionadas con servicios 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);
    }
}
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);
    }
}
$vbLabelText   $csharpLabel

Descripció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. Dirige las solicitudes a odata/Service y sirve una lista estática de objetos Service, incluyendo una laptop y un teléfono inteligente. El método Get, decorado con [EnableQuery], permite a los clientes realizar consultas OData (filtrado, ordenamiento, paginación) 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()
    );
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()
    );
$vbLabelText   $csharpLabel

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 el ODataConventionModelBuilder, que especifica un conjunto de entidades para entidades Service. Luego se llama al método AddOData para configurar los servicios OData, incluyendo la habilitación de select, filter, order by, count, expand, y estableciendo 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 usado para consultar, 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 nombres predeterminadas, minimizando los requisitos de código. Alternativamente, los desarrolladores pueden utilizar la clase ODataModelBuilder para un mayor control sobre el EDM.

Captura de pantalla del código

OData C# (Cómo Funciona para Desarrolladores): Figura 4 - Código en Visual Studio

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

OData C# (Cómo Funciona para Desarrolladores): Figura 5 - Salida del Servicio OData

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.

OData C# (Cómo Funciona para Desarrolladores): Figura 6 - IronPDF

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.

Install-Package IronPdf

Generación de PDF

Para generar un documento PDF desde 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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

Este 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.

OData C# (Cómo Funciona para Desarrolladores): Figura 7 - Salida en PDF

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.

Preguntas Frecuentes

¿Cómo simplifica OData el desarrollo de API en .NET?

OData simplifica el desarrollo de API en .NET al proporcionar un protocolo estandarizado para consultar y manipular datos utilizando operaciones CRUD. Sigue prácticas RESTful con URLs y verbos HTTP, utilizando un Modelo de Datos de Entidad (EDM) para representar datos en formatos JSON o AtomPub.

¿Cuáles son los beneficios clave de usar OData en aplicaciones .NET?

Los beneficios clave de usar OData en aplicaciones .NET incluyen la estandarización, capacidades de consulta enriquecida, mejor experiencia para el desarrollador e interoperabilidad entre diferentes plataformas, lo que reduce la complejidad y mejora la eficiencia en la recuperación de datos.

¿Cómo puedo configurar un servicio OData en una aplicación ASP.NET Core?

Para configurar un servicio OData en una aplicación ASP.NET Core, necesitas definir un modelo OData y configurar el middleware. Puedes hacerlo instalando el paquete NuGet Microsoft.AspNetCore.OData y utilizando el ODataConventionModelBuilder para definir tu modelo de datos de entidad.

¿Cuál es el papel del atributo EnableQuery en OData?

El atributo EnableQuery en OData permite a los clientes realizar operaciones como filtrado, ordenamiento y paginación sobre los datos expuestos por un controlador OData, mejorando la flexibilidad y usabilidad de la API.

¿Cómo puedo generar un PDF a partir de contenido HTML en .NET?

Puedes generar un PDF a partir de contenido HTML en .NET utilizando la biblioteca IronPDF. Creando una cadena HTML y empleando la clase ChromePdfRenderer, puedes renderizar el HTML como un documento PDF, que luego puede ser guardado en un archivo.

¿Cuál es el propósito de ODataConventionModelBuilder en .NET?

El ODataConventionModelBuilder en .NET se usa para generar automáticamente un Modelo de Datos de Entidad (EDM) usando convenciones de nombres predeterminadas, reduciendo la cantidad de código requerido para definir el modelo OData en las aplicaciones.

¿Cuál es una biblioteca completa para la manipulación de PDFs en .NET?

IronPDF es una biblioteca completa en C# para la manipulación de PDFs, que facilita tareas como la conversión de archivos a PDFs, la división y eliminación de páginas PDF, y la generación de PDFs desde HTML dentro de aplicaciones .NET.

¿Cómo mejora OData la interoperabilidad en servicios .NET?

OData mejora la interoperabilidad permitiendo que los clientes que adhieren al estándar OData interactúen sin problemas con servicios OData basados en .NET, promoviendo una integración más amplia a través de diferentes aplicaciones y plataformas.

¿Cuáles son las operaciones CRUD en el contexto de OData?

Las operaciones CRUD en el contexto de OData se refieren a las operaciones fundamentales de Crear, Leer, Actualizar y Eliminar, que son esenciales para manipular datos dentro de APIs RESTful.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más