
OData em C# (Como funciona para desenvolvedores)
O protocolo Open Data ( OData ) simplifica a criação e o consumo de APIs RESTful no desenvolvimento Microsoft .NET . Oferece uma abordagem padronizada para consultar e manipular dados por meio de operações CRUD (Criar, Ler, Atualizar, Excluir) já conhecidas. Este artigo explora como o Open Data Protocol simplifica o desenvolvimento de APIs em .NET, fornecendo exemplos e destacando seus principais benefícios. Para explorar mais sobre OData, você pode consultar o repositório GitHub do OData C# para obter o código-fonte.

OData segue as práticas padrão para a construção de APIs web RESTful, usando URLs e verbos HTTP como GET e POST para definir operações. Ele representa dados usando um Modelo de Dados de Entidade (EDM) e JSON ou AtomPub para codificação de mensagens. Embora o OData simplifique o desenvolvimento de APIs em comparação com o GraphQL, ele pode oferecer menos recursos avançados.

Benefícios de usar OData no .NET
- Padronização: OData impõe uma maneira consistente de definir modelos de dados de entidade, lidar com solicitações e formatar respostas. Isso reduz a complexidade do desenvolvimento e simplifica a integração do aplicativo cliente.
- Capacidades Ricas de Consulta: OData oferece uma forma uniforme de consultar dados para realizar operações CRUD, filtragem ($filter), ordenação (Ordem Crescente/Ordem Decrescente)($orderby), e funcionalidades de paginação ($top, $skip), permitindo que os clientes recuperem conjuntos de dados específicos de forma eficiente.
- Experiência de desenvolvimento aprimorada: As bibliotecas .NET para OData simplificam o desenvolvimento de APIs. Os desenvolvedores podem aproveitar componentes pré-construídos para roteamento, tratamento de consultas e serialização de dados, reduzindo a duplicação de código e o tempo de desenvolvimento.
- Interoperabilidade: Clientes compatíveis com OData de diversas plataformas podem interagir perfeitamente com seu serviço OData baseado em .NET, promovendo uma integração de aplicativos mais ampla.
Introdução ao OData no .NET Framework
As bibliotecas .NET para OData melhoram a experiência do desenvolvedor, facilitando maneiras eficientes de manipular conjuntos de dados. Simplifica a criação e o consumo de APIs RESTful no desenvolvimento .NET . Oferece uma abordagem padronizada para consultar e manipular dados por meio de operações CRUD familiares (Criar, Ler, Atualizar, Excluir).
Configurando o OData em projetos .NET
Comece abrindo seu novo projeto no Visual Studio. Em seguida, acesse o Solution Explorer, clique com o botão direito do mouse no seu projeto e selecione "Gerenciar Pacotes NuGet ". Procure por Microsoft.AspNetCore.OData e instale-o. A versão atual do OData é 8.2.5.
Para instalar o OData no Console do Gerenciador de Pacotes NuGet , use o seguinte comando.

Exemplo: Criando um serviço OData no ASP.NET Core
Vamos criar uma classe de modelo OData simples em uma aplicação ASP.NET Core . No código a seguir, a classe abaixo expõe uma lista de serviços que podem ser consultados usando a sintaxe 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 ClassDescrição do código
A classe Service representa uma estrutura de dados básica em C# para gerenciar um serviço. Inclui três propriedades: Id: Um identificador inteiro para o serviço. FirstName: Uma string representando o primeiro nome associado ao serviço. Price: Um valor decimal indicando o preço do serviço. Esta classe pode ser usada como um bloco de construção para criar funcionalidades mais complexas relacionadas ao serviço no desenvolvimento .NET. Também podemos usar propriedades de coleção ou de navegação, dependendo do cenário.
Veja como configurar um controlador OData em uma aplicação ASP.NET Core no Visual Studio para expor uma lista de serviços através de um endpoint OData padronizado. O exemplo a seguir demonstra uma implementação básica usando uma lista estática de serviços e habilitando funcionalidades de consulta OData na API Web:
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 NamespaceDescrição do código
O código fornecido define um ODataController chamado ServiceController em uma aplicação ASP.NET Core, permitindo consultar e manipular dados usando o protocolo OData. Ele roteia pedidos para odata/Service e serve uma lista estática de objetos Service, incluindo um laptop e um smartphone. O método Get, decorado com [EnableQuery], permite que clientes realizem consultas OData (filtro, ordenação, paginação) na lista de Produtos, retornando os resultados como um IActionResult para pedidos HTTP GET.
Registrar Serviços OData no Program.cs
Para integrar o OData em uma aplicação .NET 6, precisamos instalar e configurar os pacotes OData necessários. Isso envolve definir o modelo OData, configurar o middleware OData e configurar os serviços para suportar recursos do OData, como filtragem, ordenação e expansão.
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())Descrição do código
Este código configura o suporte a OData em uma aplicação .NET 6. Primeiro, importa namespaces necessários e cria uma instância WebApplicationBuilder. O método GetEdmModel define o modelo OData usando o ODataConventionModelBuilder, que especifica um conjunto de entidades para entidades Service. O método AddOData é então chamado para configurar os serviços OData, incluindo habilitar select, filter, order by, count, expand e definir um valor máximo de top de 20 para resultados de consulta. Essa configuração garante que o aplicativo possa lidar com consultas OData de forma eficaz.
O método AddOData() emprega o método GetEdmModel(), que recupera o modelo de dados usado para consulta, formando a base de um serviço OData. Este serviço utiliza um modelo de dados abstrato conhecido como Entity Data Model (EDM) para definir os dados expostos. A classe ODataConventionModelBuilder gera um EDM através de convenções de nomenclatura padrão, minimizando os requisitos de código. Alternativamente, os desenvolvedores podem utilizar a classe ODataModelBuilder para maior controle sobre o EDM.
Captura de tela do código

Executando o serviço
Após executar o serviço, você pode consultá-lo usando várias opções de consulta OData, como:
https://localhost:7131/odata/Service
Saída do Programa

Introdução ao IronPDF
IronPDF é uma biblioteca C# abrangente projetada para simplificar a conversão de arquivos para PDF , a divisão de páginas de PDF e a remoção de páginas de PDFs em aplicativos .NET . Oferece uma ampla gama de recursos, incluindo a capacidade de gerar PDFs a partir de HTML, CSS, imagens e JavaScript, permitindo que os desenvolvedores transformem facilmente conteúdo da web em documentos PDF de alta qualidade. Com sua API intuitiva e poderoso mecanismo de renderização, o IronPDF permite que os desenvolvedores simplifiquem os processos de geração de PDFs, facilitando a integração de recursos de geração dinâmica de documentos em seus aplicativos com facilidade.

Adicionando o IronPDF ao projeto
Para instalar o IronPDF no Visual Studio, acesse o Console do Gerenciador de Pacotes NuGet e use o seguinte comando.
Geração de PDF
Para gerar um documento PDF a partir de conteúdo HTML em uma aplicação .NET, podemos usar a classe ChromePdfRenderer de uma biblioteca como DinkToPdf ou similar. Este exemplo demonstra como criar um PDF com os detalhes do registro de um funcionário.
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 exemplo cria um registro simples de Funcionário e, em seguida, usa o IronPDF para gerar um documento PDF exibindo o nome da pessoa. Este vídeo demonstra como os registros em C# podem ser integrados perfeitamente à geração de PDFs em aplicações .NET .

Conclusão
OData simplifica o desenvolvimento e o consumo de APIs RESTful em .NET , fornecendo recursos padronizados de consulta e manipulação. Também podemos integrá-lo ao Entity Framework, aumentando a eficiência do desenvolvimento ao simplificar o acesso e o gerenciamento de dados. O OData simplifica o desenvolvimento de APIs, permitindo integração e interoperabilidade perfeitas em diversas plataformas, graças às suas ricas funcionalidades de consulta e à experiência aprimorada do desenvolvedor. Além disso, o IronPDF oferece recursos abrangentes e suporte para manipulação robusta de PDFs em aplicativos .NET .

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.
Artigos relacionados


