Sobes.tech
Junior

RESTful nima va u veb-xizmatlarni ishlab chiqishda qanday ishlatiladi?

sobes.tech AI

AIdan javob

RESTful - bu tarqatilgan tizimlarni ishlab chiqish uchun arxitektura uslubi, masalan, veb-xizmatlar. U REST (Representational State Transfer) prinsiplari asosida qurilgan.

RESTning asosiy prinsiplari:

  • Mijoz-server: Mijoz va server aniq ajratilgan.
  • Stateless (holatsiz): Server mijozning holati haqida ma'lumotni saqlamaydi. Har bir so'rovda barcha kerakli ma'lumotlar bo'lishi kerak.
  • Cacheable (keshga olish): Mijozlar yoki oraliq tugunlar javoblarni keshga olishi mumkin.
  • Layered System (qavatli tizim): Tizim qavatlarga bo'linishi mumkin, va har bir qavat faqat yaqin qavatni ko'radi.
  • Code-On-Demand (kod talab qilinishi bilan - ixtiyoriy): Server vaqtinchalik funksionallikni kengaytirishi yoki sozlashi mumkin, bajariladigan kodni yuborish orqali.
  • Uniform Interface (bir xil interfeys): Asosiy prinsiplari:
    • Identification of Resources (resurslarni identifikatsiya qilish): Resurslar URI yordamida aniqlanadi.
    • Manipulation of Resources through Representations (resurslarni vakilliklar orqali boshqarish): Mijoz resurs bilan uning vakilligi (masalan, JSON, XML) yordamida muloqot qiladi.
    • Self-descriptive Messages (o'z-o'zini ta'riflovchi xabarlar): Har bir xabar uni ishlash uchun yetarli ma'lumotni o'z ichiga oladi.
    • Hypermedia as the Engine of Application State (HATEOAS): Server javoblarida boshqa resurslarga havolalar bo'ladi, bu mijozga dinamik ravishda mavjud harakatlar va o'tishlarni aniqlash imkonini beradi.

C# tilida RESTful arxitektura ASP.NET Core Web API texnologiyasi yordamida amalga oshiriladi.

C# da RESTfulning odatiy misoli:

// "Mahsulot" resursini boshqarish uchun kontroler
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductRepository _productRepository;

    public ProductsController(IProductRepository productRepository)
    {
        _productRepository = productRepository;
    }

    // Barcha mahsulotlarni olish (GET /api/products)
    [HttpGet]
    public async Task<ActionResult<IEnumerable<Product>>> GetProducts()
    {
        var products = await _productRepository.GetAllAsync();
        return Ok(products);
    }

    // ID bo'yicha mahsulotni olish (GET /api/products/{id})
    [HttpGet("{id}")]
    public async Task<ActionResult<Product>> GetProduct(int id)
    {
        var product = await _productRepository.GetByIdAsync(id);

        if (product == null)
        {
            return NotFound();
        }

        return Ok(product);
    }

    // Yangi mahsulot yaratish (POST /api/products)
    [HttpPost]
    public async Task<ActionResult<Product>> CreateProduct(Product product)
    {
        await _productRepository.AddAsync(product);
        return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
    }

    // Mavjud mahsulotni yangilash (PUT /api/products/{id})
    [HttpPut("{id}")]
    public async Task<IActionResult> UpdateProduct(int id, Product product)
    {
        if (id != product.Id)
        {
            return BadRequest();
        }

        var existingProduct = await _productRepository.GetByIdAsync(id);
        if (existingProduct == null)
        {
            return NotFound();
        }

        await _productRepository.UpdateAsync(product);
        return NoContent();
    }

    // Mahsulotni o'chirish (DELETE /api/products/{id})
    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteProduct(int id)
    {
        var product = await _productRepository.GetByIdAsync(id);
        if (product == null)
        {
            return NotFound();
        }

        await _productRepository.DeleteAsync(id);
        return NoContent();
    }
}

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
}

public interface IProductRepository
{
    Task<IEnumerable<Product>> GetAllAsync();
    Task<Product> GetByIdAsync(int id);
    Task AddAsync(Product product);
    Task UpdateAsync(Product product);
    Task DeleteAsync(int id);
}

HTTP ning standart metodlaridan (GET, POST, PUT, DELETE) foydalanish resurslar ustida operatsiyalarni amalga oshirish uchun (URI bilan ifodalangan) RESTful API ning muhim jihatidir. HTTP status kodlari operatsiyaning natijasini ko'rsatish uchun ishlatiladi (200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found).