Minimalne API w .NET 6. Jak napisać pełnoprawne API w mgnieniu oka
Przygoda każdego programisty zaczyna się od podstaw. Ostatnio natknęłam się na bardzo ciekawy temat, który chciałabym Wam dzisiaj przybliżyć – minimalne API. Zanim do niego przejdziemy, powinniśmy zacząć od samego pojęcia jakim jest wyżej wspomniane API.
API (z ang. Application Programming Interface) oznacza Interfejs Programowania Aplikacji, czyli to w jaki sposób programy oraz podprogramy komunikują się ze sobą. Dotychczas w C# najprostszy kontroler mogliśmy wykonać w taki sposób:
using System.Collections.Generic; using System.Web.Http; namespace MyWebAPI.Controllers { public class ValuesController : ApiController { [HttpGet] public IEnumerable<string> Values() { return new string[] { "value1", "value2" }; } [HttpGet] public string Value(int id) { return "value"; } [HttpPost] public void SaveNewValue([FromBody] string value) { } [HttpPut] public void UpdateValue(int id, [FromBody] string value) { } [HttpDelete] public void RemoveValue(int id) { } } }
Spis treści
Funkcjonalne API w trzech linijkach?
Minimalne API umożliwia budowanie interfejsów z użyciem platformy .NET w prostszy sposób niż dotychczas. Nie musisz przejmować się skomplikowaną strukturą oraz dużą ilością kodu. Najprostszą metodę HTTP, w tym przypadku GET, możesz napisać za pomocą zaledwie trzech linijek.
var app = WebApplication.Create(args); app.MapGet("/", () => "Hello World!"); app.Run();
To wszystko! Podczas kompilowania powyższego kodu, zwrócony zostanie kod odpowiedzi 200 OK, z zawartością „Hello World!”. Pewnie zadajesz sobie pytanie, jak to jest możliwe? Już spieszę z pomocą! Dzięki instrukcjom najwyższego poziomu – funkcji kompilatora, wprowadzonej w C# 9 – jesteś w stanie wykonać napisany przez siebie program bez deklaracji przestrzeni nazw, deklaracji klasy, a nawet metody Main(string[] args)
.
W podobny sposób możesz obsłużyć również inne metody HTTP.
app.MapPost("/", () => "This is a POST"); app.MapPut("/", () => "This is a PUT"); app.MapDelete("/", () => "This is a DELETE");
Wszystko w jednym pliku, czyli globalne dyrektywy
A co z dyrektywą using
? W .NET 6, ASP.NET Core znajdować się one będą globalnie, w jednym pliku. Dzięki temu, unikniemy konieczności deklarowania ich w każdym pliku źródłowym z osobna.
global using System; global using System.Net.Http; global using System.Threading.Tasks; global using Microsoft.AspNetCore.Builder; global using Microsoft.Extensions.Hosting; global using Microsoft.Extensions.DependencyInjection;
Deklarowanie modelu jeszcze nigdy nie było takie proste
Co więcej, wystarczy jeden dodatkowy wiersz kodu, aby móc pracować z rekordem osoby. Parametry pozycyjne umożliwiają nam zadeklarowanie modelu w zaledwie jednej linijce.
var app = WebApplication.Create(args); app.MapGet("/person", () => new Person("Amy", "Scott")); await app.RunAsync(); public record Person(string FirstName, string LastName);
Czy minimalne API to dobre rozwiązanie?
Jeśli dopiero zaczynasz tworzyć interfejsy API w ASP.NET Core, prawdopodobnie jest to mile widziane ulepszenie. Jednakże, czy spełni ono wszystkie wymagania na skali produkcyjnej?
Minimalne API jest alternatywnym oraz szybszym sposobem budowania usług http, które według mnie będzie bardziej przystępną metodą, w szczególności dla osób zaczynających swoją przygodę z programowaniem.
Trzeba pamiętać, że to rozwiązanie nie zastąpi nam kompleksowego framework’a MVC.
Zdjęcie główne artykułu pochodzi z unsplash.com.