Можете ли вы описать ключевые характеристики RESTful API и чем они отличаются от других способов взаимодействия с сервисами?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
RESTful API — это подход к построению веб-сервисов вокруг ресурсов и стандартных HTTP-методов. Важно показать понимание stateless-взаимодействия, использования URL для идентификации ресурсов и предсказуемости API. Также полезно уметь сравнить REST с RPC, SOAP или просто «произвольными» HTTP-эндпоинтами.
Определение:
RESTful API — это API, которое следует принципам REST: ресурсы представлены через URL, операции над ними выполняются стандартными HTTP-методами, а каждый запрос содержит всё необходимое для обработки без хранения сервером состояния клиента между запросами.
Ключевые характеристики:
- ресурсный подход:
/users/42,/orders/1001; - использование HTTP-методов по назначению:
GET,POST,PUT,PATCH,DELETE; - stateless: сервер не обязан помнить контекст предыдущих запросов;
- единообразные ответы и коды статуса HTTP;
- обычно используется JSON как формат данных, хотя это не обязательное требование REST.
От других способов взаимодействия REST отличается тем, что делает акцент не на вызове конкретной функции, а на работе с ресурсами. Например, в RPC чаще описывают «сделай действие», а в REST — «прочитай/измени/удали ресурс».
Пример использования:
Например, в сервисе управления пользователями можно сделать такие эндпоинты:
GET /api/users
GET /api/users/42
POST /api/users
PUT /api/users/42
DELETE /api/users/42
GET /api/users/42возвращает пользователя с id 42;POST /api/usersсоздаёт нового пользователя;PUT /api/users/42обновляет пользователя;DELETE /api/users/42удаляет пользователя.
В C# это обычно выглядит как контроллер ASP.NET Core:
[ApiController]
[Route("api/users")]
public class UsersController : ControllerBase
{
[HttpGet("{id}")]
public IActionResult GetById(int id)
{
return Ok(new { Id = id, Name = "Alex" });
}
[HttpPost]
public IActionResult Create([FromBody] UserCreateRequest request)
{
return Created($"/api/users/123", new { Id = 123, request.Name });
}
}
public class UserCreateRequest
{
public string Name { get; set; } = string.Empty;
}
Пояснение кода:
[ApiController] включает удобное поведение для web API, включая автоматическую обработку ошибок валидации.
[Route("api/users")] задаёт базовый путь для ресурса users.
[HttpGet("{id}")] связывает метод с запросом GET /api/users/{id} и получает id из URL.
[HttpPost] обрабатывает создание ресурса через POST /api/users.
Created(...) возвращает код 201 Created, что соответствует успешному созданию ресурса.
Этот пример показывает REST-подход: URL описывает ресурс, а HTTP-метод — действие над ним. В отличие от RPC-подхода, где мог бы быть метод вроде /api/users/getById, здесь интерфейс ближе к естественной модели работы с сущностями.
Ключевые моменты:
- REST строится вокруг ресурсов, а не вокруг «операций».
- HTTP-методы имеют стандартный смысл и не должны использоваться произвольно.
- Stateless-архитектура упрощает масштабирование и снижает связанность.
- Важны корректные HTTP-коды:
200,201,400,404,500и т.д. - REST удобен для публичных и внутренних API, но не всегда идеален для сложных сценариев с множеством команд и нестандартной логикой.
- Главное отличие от RPC/SOAP — более универсальный и предсказуемый контракт через стандарт HTTP.