Przejdź do treści stopki
POMOC .NET

OData C# (jak to działa dla programistów)

Protokół Open Data Protocol (OData) upraszcza tworzenie i korzystanie z interfejsów API RESTful w środowisku programistycznym Microsoft .NET. Oferuje on standardowe podejście do wyszukiwania i manipulowania danymi poprzez znane operacje CRUD (Create, Read, Update, Delete). W tym artykule omówiono, w jaki sposób Open Data Protocol usprawnia tworzenie interfejsów API w środowisku .NET, podając przykłady i podkreślając jego kluczowe zalety. Aby dowiedzieć się więcej o OData, można sprawdzić repozytorium OData C# na GitHubie, gdzie znajduje się kod źródłowy.

@@—IMG-1392-BG—@@OData C# (Jak to działa dla programistów): Rysunek 1 — OData C# — protokół dostępu do danych@@—IMG-1392-EG—@@

OData stosuje standardowe praktyki tworzenia interfejsów API RESTful, wykorzystując adresy URL i czasowniki HTTP, takie jak GET i POST, do definiowania operacji. Przedstawia dane przy użyciu modelu danych encji (EDM) oraz JSON lub AtomPub do kodowania komunikatów. Chociaż OData upraszcza tworzenie interfejsów API w porównaniu z GraphQL, może oferować mniej zaawansowanych funkcji.

OData C# (Jak to działa dla programistów): Rysunek 2 — OData

Korzyści z używania OData w .NET

  • Standaryzacja: OData wymusza spójny sposób definiowania modeli danych encji, obsługi żądań i formatowania odpowiedzi. Zmniejsza to złożoność procesu tworzenia oprogramowania i upraszcza integrację aplikacji klienckich.
  • Bogate możliwości zapytań: OData obsługuje jednolity sposób wysyłania zapytań w celu wykonywania operacji CRUD, filtrowania ($filter), sortowania (porządek rosnący/malejący) ($orderby) oraz paginacji ($top, $skip), umożliwiając klientom efektywne pobieranie określonych zestawów danych.
  • Lepsze doświadczenia programistów: Biblioteki .NET dla OData usprawniają tworzenie interfejsów API. Programiści mogą wykorzystać gotowe komponenty do routingu, obsługi zapytań i serializacji danych, co pozwala ograniczyć powielanie kodu i skrócić czas tworzenia oprogramowania.
  • Interoperacyjność: Klienci zgodni z OData z różnych platform mogą płynnie współpracować z usługą OData opartą na .NET, co sprzyja szerszej integracji aplikacji.

Pierwsze kroki z OData w platformie .NET Framework

Biblioteki .NET dla OData poprawiają komfort pracy programistów, ułatwiając wydajną obsługę zbiorów danych. Ułatwia tworzenie i korzystanie z interfejsów API RESTful w programowaniu .NET. Oferuje on standardowe podejście do wyszukiwania i manipulowania danymi poprzez znane operacje CRUD (Create, Read, Update, Delete).

Konfiguracja OData w projektach .NET

Zacznij od otwarcia nowego projektu w Visual Studio. Następnie przejdź do Eksploratora rozwiązań, kliknij prawym przyciskiem myszy swój projekt i wybierz opcję "Zarządzaj pakietami NuGet". Wyszukaj Microsoft.AspNetCore.OData i zainstaluj go. Aktualna wersja OData to 8.2.5.

Aby zainstalować OData w konsoli menedżera pakietów NuGet, użyj następującego polecenia.

Install-Package Microsoft.AspNetCore.OData

OData C# (Jak to działa dla programistów): Rysunek 3 — Instalacja OData

Przykład: Tworzenie usługi OData w ASP.NET Core

Stwórzmy prostą klasę modelu OData w aplikacji ASP.NET Core. W poniższym kodzie klasa przedstawiona poniżej udostępni listę usług, które można wyszukiwać przy użyciu składni 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; }
}
Public Class Service
    Public Property Id As Integer
    Public Property FirstName As String
    Public Property Price As Decimal
End Class
$vbLabelText   $csharpLabel

Opis kodu

Klasa Service reprezentuje podstawową strukturę danych w języku C# służącą do zarządzania usługą. Zawiera trzy właściwości: Id: identyfikator usługi w postaci liczby całkowitej. FirstName: ciąg znaków reprezentujący imię powiązane z usługą. Price: wartość dziesiętna wskazująca cenę usługi. Klasa ta może służyć jako element składowy do tworzenia bardziej złożonych funkcji związanych z usługami w ramach programowania w środowisku .NET. W zależności od scenariusza możemy również wykorzystać właściwości kolekcji lub nawigacji.

Oto jak skonfigurować kontroler OData w aplikacji ASP.NET Core w Visual Studio, aby udostępnić listę usług za pośrednictwem standardowego punktu końcowego OData. Poniższy przykład ilustruje podstawową implementację wykorzystującą statyczną listę usług i umożliwiającą korzystanie z funkcji zapytań OData w 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);
    }
}
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 Namespace
$vbLabelText   $csharpLabel

Opis kodu

Podany kod definiuje ODataController o nazwie ServiceController w aplikacji .NET Core, umożliwiając wyszukiwanie i manipulowanie danymi przy użyciu protokołu OData. Przekierowuje żądania do odata/Service i udostępnia statyczną listę obiektów Service, w tym laptopa i smartfona. Metoda Get, ozdobiona [EnableQuery], pozwala klientom wykonywać zapytania OData (filtrowanie, sortowanie, stronicowanie) na liście produktów, zwracając wyniki jako IActionResult dla żądań HTTP GET.

Zarejestruj usługi OData w pliku Program.cs

Aby zintegrować OData z aplikacją .NET 6, musimy zainstalować i skonfigurować niezbędne pakiety OData. Obejmuje to zdefiniowanie modelu OData, skonfigurowanie oprogramowania pośredniczącego OData oraz skonfigurowanie usług w celu obsługi funkcji OData, takich jak filtrowanie, sortowanie i rozszerzanie.

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()
    );
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())
$vbLabelText   $csharpLabel

Opis kodu

Ten kod konfiguruje obsługę OData w aplikacji .NET 6. Najpierw importuje niezbędne przestrzenie nazw i tworzy instancję WebApplicationBuilder. Metoda GetEdmModel definiuje model OData przy użyciu ODataConventionModelBuilder, który określa zbiór encji dla encji Service. Następnie wywoływana jest metoda AddOData w celu skonfigurowania usług OData, w tym włączenia funkcji select, filter, order by, count, expand oraz ustawienia maksymalnej liczby wyników zapytania na 20. Taka konfiguracja zapewnia, że aplikacja może efektywnie obsługiwać zapytania OData.

Metoda AddOData() wykorzystuje metodę GetEdmModel(), która pobiera model danych używany do wysyłania zapytań, tworząc podstawę usługi OData. Usługa ta wykorzystuje abstrakcyjny model danych znany jako Entity Data Model (EDM) do definiowania udostępnianych danych. Klasa ODataConventionModelBuilder generuje EDM zgodnie z domyślnymi konwencjami nazewniczymi, minimalizując wymagania dotyczące kodu. Alternatywnie programiści mogą wykorzystać klasę ODataModelBuilder, aby uzyskać większą kontrolę nad EDM.

Zrzut ekranu z kodem

OData C# (Jak to działa dla programistów): Rysunek 4 — Kod w Visual Studio

Uruchamianie usługi

Po uruchomieniu usługi można wysyłać do niej zapytania przy użyciu różnych opcji zapytań OData, takich jak:

https://localhost:7131/odata/Service

Wynik działania programu

OData C# (Jak to działa dla programistów): Rysunek 5 — Wynik usługi OData

Wprowadzenie do IronPDF

IronPDF to kompleksowa biblioteka C# zaprojektowana w celu uproszczenia konwersji plików do formatu PDF, dzielenia stron PDF oraz usuwania stron z plików PDF w aplikacjach .NET. Oferuje szeroki zakres funkcji, w tym możliwość generowania plików PDF z HTML, CSS, obrazów i JavaScript, umożliwiając programistom łatwą transformację treści internetowych w wysokiej jakości dokumenty PDF. Dzięki intuicyjnemu API i potężnemu silnikowi renderowania IronPDF umożliwia programistom usprawnienie procesów generowania plików PDF, ułatwiając integrację funkcji dynamicznego generowania dokumentów z ich aplikacjami.

OData C# (Jak to działa dla programistów): Rysunek 6 – IronPDF

Dodawanie IronPDF do projektu

Aby zainstalować IronPDF w Visual Studio, przejdź do konsoli NuGet Package Manager Console i użyj następującego polecenia.

Install-Package IronPdf

Generowanie pliku PDF

Aby wygenerować dokument PDF z treści HTML w aplikacji .NET, możemy użyć klasy ChromePdfRenderer z biblioteki takiej jak DinkToPdf lub podobnej. Ten przykład pokazuje, jak utworzyć plik PDF zawierający szczegóły rekordu pracownika.

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");
    }
}
'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 Class
$vbLabelText   $csharpLabel

W tym przykładzie tworzony jest prosty rekord pracownika, a następnie za pomocą IronPDF generowany jest dokument PDF zawierający imię i nazwisko tej osoby. Pokazuje, jak płynnie rekordy C# mogą integrować się z generowaniem plików PDF w aplikacjach .NET.

OData C# (Jak to działa dla programistów): Rysunek 7 – Wynik w formacie PDF

Wnioski

OData upraszcza tworzenie i korzystanie z interfejsów API RESTful w środowisku .NET, zapewniając standardowe funkcje wyszukiwania i manipulacji danymi. Możemy również zintegrować go z Entity Framework, zwiększając wydajność programowania poprzez uproszczenie dostępu do danych i zarządzania nimi. OData usprawnia tworzenie interfejsów API, umożliwiając płynną integrację i współdziałanie między różnymi platformami dzięki bogatym funkcjom zapytań i ulepszonemu doświadczeniu programisty. Ponadto IronPDF oferuje kompleksowe funkcje i wsparcie dla zaawansowanej obróbki plików PDF w aplikacjach .NET.

Często Zadawane Pytania

W jaki sposób OData upraszcza tworzenie interfejsów API w środowisku .NET?

OData upraszcza tworzenie interfejsów API w środowisku .NET Standard, zapewniając standardowy protokół do wyszukiwania i manipulowania danymi za pomocą operacji CRUD. Jest zgodna z praktykami RESTful w zakresie adresów URL i czasowników HTTP, wykorzystując model danych encji (EDM) do reprezentowania danych w formatach JSON lub AtomPub.

Jakie są główne zalety korzystania z OData w aplikacjach .NET?

Główne zalety korzystania z OData w aplikacjach .NET to standaryzacja, bogate możliwości zapytań, lepsze wrażenia programisty oraz interoperacyjność między różnymi platformami, co zmniejsza złożoność i usprawnia pobieranie danych.

Jak skonfigurować usługę OData w aplikacji ASP.NET Core.NET Core?

Aby skonfigurować usługę OData w aplikacji ASP.NET Core, należy zdefiniować model OData i skonfigurować oprogramowanie pośredniczące. Można to zrobić, instalując pakiet NuGet Microsoft.AspNetCore.OData i używając ODataConventionModelBuilder do zdefiniowania modelu danych encji.

Jaka jest rola atrybutu EnableQuery w OData?

Atrybut EnableQuery w OData pozwala klientom na wykonywanie operacji, takich jak filtrowanie, sortowanie i stronicowanie danych udostępnianych przez kontroler OData, zwiększając elastyczność i użyteczność API.

Jak wygenerować plik PDF z treści HTML w środowisku .NET?

W środowisku .NET można wygenerować plik PDF z treści HTML przy użyciu biblioteki IronPDF. Tworząc ciąg znaków HTML i wykorzystując klasę ChromePdfRenderer, można renderować kod HTML jako dokument PDF, który następnie można zapisać do pliku.

Jaki jest cel ODataConventionModelBuilder w .NET?

ODataConventionModelBuilder w .NET służy do automatycznego generowania modelu danych encji (EDM) przy użyciu domyślnych konwencji nazewniczych, co zmniejsza ilość kodu potrzebnego do zdefiniowania modelu OData w aplikacjach.

Czym jest kompleksowa biblioteka do obróbki plików PDF w środowisku .NET?

IronPDF to kompleksowa biblioteka w języku C# do obsługi plików PDF, która ułatwia wykonywanie takich zadań, jak konwersja plików do formatu PDF, dzielenie i usuwanie stron PDF oraz generowanie plików PDF z HTML w aplikacjach .NET.

W jaki sposób OData zwiększa interoperacyjność w usługach .NET?

OData zwiększa interoperacyjność, umożliwiając klientom zgodnym ze standardem OData płynną interakcję z usługami OData opartymi na platformie .NET, co sprzyja szerszej integracji między różnymi aplikacjami i platformami.

Czym są operacje CRUD w kontekście OData?

Operacje CRUD w kontekście OData odnoszą się do podstawowych operacji tworzenia (Create), odczytu (Read), aktualizacji (Update) i usuwania (Delete), które są niezbędne do manipulowania danymi w ramach interfejsów API RESTful.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie