NhatSoft.
← Quay lại danh sách
NET / C#

Lộ trình Xây dựng RESTful API với C# và .NET Core: Từ Số 0 Đến Thực Chiến

Đăng bởi Quản trị hệ thống05/03/202656 lượt xem
Lộ trình Xây dựng RESTful API với C# và .NET Core: Từ Số 0 Đến Thực Chiến

Chào các bạn, lại là TDN Dev đây.

Nếu bạn đang bước chân vào con đường Backend Developer, hoặc đang muốn chuyển đổi từ Node.js/PHP sang một nền tảng "hạng nặng" dùng cho doanh nghiệp (Enterprise), thì C# và .NET Core (nay là .NET 8/9) chính là lựa chọn hoàn hảo nhất ở thời điểm hiện tại.

Trong bài viết này, mình sẽ hướng dẫn các bạn những concept cốt lõi nhất để xây dựng một RESTful API chuẩn mực bằng C#, không lý thuyết rườm rà, đi thẳng vào thực chiến!

1. Tại sao lại là C# và .NET API?

Khác với thời kỳ .NET Framework cũ kỹ và ì ạch chục năm trước, .NET Core từ phiên bản 6.0 (và nay là 8.0, 9.0) đã lột xác hoàn toàn:

  • Hiệu năng cực khủng: Nhanh hơn Node.js và Java Spring Boot trong nhiều bài test benchmark (như gRPC hay plain text).
  • Cross-platform: Chạy mượt mà trên Windows, macOS và đặc biệt là Linux (rất tiện để deploy lên Docker/VPS siêu rẻ).
  • C# là một ngôn ngữ tuyệt đẹp: Cấu trúc chặt chẽ, Strongly-typed (kiểu dữ liệu tĩnh), hỗ trợ LINQ thao tác với database "như một vị thần", và các tính năng hiện đại (Pattern matching, Records).

2. Cấu trúc một Project .NET API chuẩn

Khi khởi tạo một project Web API bằng lệnh dotnet new webapi, hệ thống sẽ tự động sinh ra cho bạn một số file quan trọng. Trong đó, "trái tim" của ứng dụng nằm ở file Program.cs.

Đây là nơi bạn đăng ký các dịch vụ (Dependency Injection) và thiết lập luồng xử lý (Middleware Pipeline).

C#


var builder = WebApplication.CreateBuilder(args);

// 1. Đăng ký các dịch vụ (Services) vào Container builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();

// Đăng ký Service của riêng bạn (Dependency Injection) builder.Services.AddScoped<IProductService, ProductService>();

var app = builder.Build();

// 2. Cấu hình HTTP request pipeline (Middleware) if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); }

app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers();

app.Run();

3. Khởi tạo Controller đầu tiên

Trong mô hình MVC hoặc Web API, Controller làm nhiệm vụ tiếp nhận Request từ Client (React, Vue, Mobile App), kiểm tra tính hợp lệ, gọi xuống tầng Service để xử lý logic, và trả về Response.

Hãy xem cách mình định nghĩa một ProductsController cực kỳ clean dưới đây:

C#


using Microsoft.AspNetCore.Mvc;

namespace NhatSoft.API.Controllers { [Route("api/[controller]")] [ApiController] public class ProductsController : ControllerBase { private readonly IProductService _productService;

    // Tiêm (Inject) Service vào thông qua Constructor
    public ProductsController(IProductService productService)
    {
        _productService = productService;
    }

    [HttpGet]
    public async Task&lt;IActionResult&gt; GetAll()
    {
        var products = await _productService.GetAllProductsAsync();
        return Ok(new { Success = true, Data = products });
    }

    [HttpPost]
    public async Task&lt;IActionResult&gt; Create([FromBody] CreateProductDto request)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        var newProduct = await _productService.CreateProductAsync(request);
        return CreatedAtAction(nameof(GetAll), new { id = newProduct.Id }, newProduct);
    }
}

}

Phân tích nhanh:

  • [Route("api/[controller]")]: Tự động map URL thành /api/products.
  • [ApiController]: Tự động validate dữ liệu (Model Binding) và trả về lỗi 400 nếu DTO không hợp lệ.
  • IActionResult: Kiểu trả về linh hoạt, cho phép bạn dễ dàng ném ra các HTTP Status Code chuẩn REST (200 Ok, 201 Created, 400 BadRequest...).

4. Lời khuyên từ Tech Lead để code C# "sạch" hơn

Nếu bạn chỉ viết API cho chạy được thì rất dễ, nhưng để hệ thống dễ bảo trì khi dự án phình to, hãy nhớ 3 quy tắc sau:

  1. Không viết Logic truy xuất Database trong Controller: Controller chỉ nên làm nhiệm vụ nhận/trả HTTP. Mọi logic nghiệp vụ (Business Rule) hãy đẩy xuống tầng Service. Việc truy xuất dữ liệu hãy giao cho Repository hoặc UnitOfWork.
  2. Sử dụng DTO (Data Transfer Object): Đừng bao giờ trả thẳng Entity Model (có chứa mật khẩu, thông tin nhạy cảm) ra ngoài API. Hãy dùng DTO và thư viện AutoMapper để chuyển đổi qua lại.
  3. Bắt lỗi tập trung (Global Exception Handling): Thay vì file nào cũng dùng try-catch, hãy viết một Middleware bắt lỗi toàn cục. Code của bạn sẽ ngắn đi một nửa!

Lời kết

C# và .NET Core là một vũ khí thực sự mạnh mẽ cho Backend. Hãy bắt đầu với những API cơ bản (CRUD), sau đó tìm hiểu sâu hơn về Entity Framework Core, JWT Authentication và triển khai lên Docker.

Hy vọng bài viết này giúp anh em có cái nhìn tổng quan và dễ thở hơn khi tiếp cận .NET. Nếu có bất kỳ thắc mắc nào về kiến trúc hoặc gặp bug khó fix, đừng ngần ngại để lại bình luận hoặc nhắn tin cho mình nhé.

Chúc anh em code không bug!

Bạn cần Server để thực hành?

Bài viết cùng chủ đề