Что такое REST?

«Что такое REST?» — вопрос из категории Сети, который задают на 39% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

REST (Representational State Transfer) — это архитектурный стиль для построения распределенных систем, в частности веб-сервисов (API). Он использует протокол HTTP как есть, опираясь на его стандартные методы и статусы.

Ключевые принципы REST:

  1. Ресурсы (Resources): Все данные и сущности (пользователи, заказы, товары) представляются в виде уникальных URI (например, /api/users/123).
  2. Единообразие интерфейса (Uniform Interface): Взаимодействие с ресурсами происходит через стандартные HTTP-методы:
    • GET — получение ресурса.
    • POST — создание нового ресурса.
    • PUT / PATCH — полное или частичное обновление ресурса.
    • DELETE — удаление ресурса.
  3. Отсутствие состояния (Stateless): Каждый запрос от клиента должен содержать всю необходимую информацию для его обработки. Сервер не хранит состояние сессии клиента между запросами.
  4. Кэшируемость (Cacheable): Ответы сервера должны явно указывать, можно ли их кэшировать и как долго, что повышает производительность.
  5. Слоистая система (Layered System): Архитектура может состоять из нескольких слоев (балансировщики, прокси, шлюзы), и клиент не должен знать, взаимодействует ли он напрямую с конечным сервером.

Пример RESTful контроллера на C# (ASP.NET Core):

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly IProductRepository _repository;

    [HttpGet]
    public ActionResult<IEnumerable<Product>> GetAll() => Ok(_repository.GetAll());

    [HttpGet("{id}")]
    public ActionResult<Product> GetById(int id)
    {
        var product = _repository.GetById(id);
        return product != null ? Ok(product) : NotFound();
    }

    [HttpPost]
    public ActionResult<Product> Create([FromBody] Product product)
    {
        var createdProduct = _repository.Add(product);
        return CreatedAtAction(nameof(GetById), new { id = createdProduct.Id }, createdProduct);
    }
}

Преимущества: простота, масштабируемость, независимость от клиентской платформы и хорошая поддержка инструментами (браузеры, Postman, клиентские библиотеки).

Видео-ответы