.NET
X'Tgħallimt dwar il-Bini ta' REST APIs f'.NET
API CRUD sempliċi, ebda pagamenti, xejn fanċi. Il-verbi HTTP, ir-routing, EF Core, u l-istatus codes finalment qed jaqbdu waqt li nibniha.
Għadni kif temmejt l-ewwel REST API vera tiegħi f'.NET: app CRUD sempliċi, ebda pagamenti, xejn fanċi. Hija bażika, iżda li nibniha hija fejn ħafna mill-fundamentali finalment qed jaqbdu għalija.
Nagħti l-verbi HTTP mad-dak li suppost jagħmlu
Kont naf li GET, POST, PUT, u DELETE jeżistu qabel ma bdejt din, iżda ma fhimtx verament għaliex kien jimporta liema wieħed tuża sakemm bnejt xi ħaġa bl-erbgħa. GET jaqra, POST joħloq, PUT jaġġorna, DELETE ineħħi, u kull wieħed jimmappja b'mod nadif fuq azzjoni ta' Controller. Nara flimkien ħdejn xulxin, tieqaf tkun regola astratta u tibda tkun ovvja.
Ir-Routing u l-Controllers
Qed nuża Controllers għax dak hu li kull tutorial li segwejt juża. [ApiController], [Route("api/products")], u azzjoni għal kull verb HTTP:
[ApiController]
[Route("api/products")]
public class ProductsController : ControllerBase
{
private readonly AppDbContext _context;
public ProductsController(AppDbContext context)
{
_context = context;
}
[HttpGet]
public async Task<IActionResult> GetAll()
{
var products = await _context.Products.ToListAsync();
return Ok(products);
}
}
Ħassitha bħal ħafna attributi biex timmemorizza fil-bidu, iżda ladarba fhimt li r-route u l-verb flimkien jiddeċiedu liema azzjoni taħdem, waqfet tħossha arbitrarja.
Nitkellem mad-database b'EF Core
Din hija l-ewwel darba li użajt Entity Framework Core għal xi ħaġa vera minflok eżempju tal-ġugarelli ta' tutorial. Mudell, DbContext, u connection string:
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<Product> Products => Set<Product>();
}
Imbagħad inħaddem il-migration biex verament noħloq it-tabella:
dotnet ef migrations add InitialCreate
dotnet ef database update
Dik kienet l-ewwel darba li l-API ħassitha qed tagħmel xi ħaġa minflok sempliċiment tirritorna dejta falza.
L-istatus codes verament ifissru xi ħaġa
Qabel din kont nirritorna 200 għal bażikament kollox. Li nibni din l-API hija l-ewwel darba li qed nagħti kas ta' liema wieħed verament qed nibgħat lura:
[HttpGet("{id}")]
public async Task<IActionResult> GetById(int id)
{
var product = await _context.Products.FindAsync(id);
if (product is null)
{
return NotFound();
}
return Ok(product);
}
[HttpPost]
public async Task<IActionResult> Create(Product product)
{
_context.Products.Add(product);
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetById), new { id = product.Id }, product);
}
NotFound() jagħti 404, Ok() 200, u CreatedAtAction jirritorna 201 flimkien mal-URL tal-ħaġa li għadha kif inħolqot. Li tagħmilhom sew jagħmel l-API tagħmel sens lil kwalunkwe ħadd li jsejjaħha mingħajr ma jaqra l-kodiċi.
Fejn dan iħallini
Xejn dwar dan il-proġett mhu avvanzat. Hija API CRUD sempliċi b'database warajha, u l-biċċa l-kbira ta' dak li tgħallimt huwa sempliċiment il-bażi taqbad f'postha għall-ewwel darba. Dak hu kollox li din hija bħalissa, u dak biżżejjed għal fejn ninsab.